如何在 Oracle PL/SQL 中处理 "more than requested number of rows"

How to handle "more than requested number of rows" in Oracle PL/SQL

如果员工工作超过 18 年,我有一个代码打印“是”,否则打印“否”。但是我得到一个错误,告诉我“精确提取 returns 多于请求的行数”。

代码如下:

DECLARE 
    currentDate NUMBER;
    hireDate NUMBER;
BEGIN
      select EXTRACT(year from sysdate) into currentDate from dual;
      select EXTRACT(year from hire_date) into hireDate from employees;
      
    IF (currentDate - hireDate) > 18 THEN
       DBMS_OUTPUT.PUT_LINE('YES');
    ELSE
       DBMS_OUTPUT.PUT_LINE('NO');
    
    END IF;

END;

如何处理这个错误?

谢谢!

我想您需要 WHERE 子句来获得特定员工。 您可以直接在 IF 子句中使用函数 EXTRACT(year from sysdate)。 您可以处理 TOO_MANY_ROWS 和 NO_DATA_FOUND:

这样的异常
DECLARE
  hireDate NUMBER;
BEGIN

  SELECT EXTRACT(year from hire_date)
    INTO hireDate
    FROM employees
   WHERE employee_id = &empId;

  IF (EXTRACT(year from sysdate) - hireDate) > 18 
  THEN
    DBMS_OUTPUT.PUT_LINE('YES');
  ELSE
    DBMS_OUTPUT.PUT_LINE('NO');
  END IF;

EXCEPTION
  WHEN NO_DATA_FOUND then
    DBMS_OUTPUT.PUT_LINE('Caught raised exception NO_DATA_FOUND');
  WHEN TOO_MANY_ROWS then
    DBMS_OUTPUT.PUT_LINE('Caught raised exception TOO_MANY_ROWS');
  WHEN OTHERS then
    RAISE_APPLICATION_ERROR(-20002, SQLERRM || ' on select employees');
END;