Database 如何处理;“超过请求的行数”;在oraclepl/SQL中

Database 如何处理;“超过请求的行数”;在oraclepl/SQL中,database,plsql,oracle-sqldeveloper,Database,Plsql,Oracle Sqldeveloper,我有一个代码,如果员工工作超过18年,则打印“是”,否则打印“否”。但我得到一个错误,告诉我“精确获取返回的行数超过请求的行数” 代码如下: DECLARE currentDate NUMBER; hireDate NUMBER; BEGIN select EXTRACT(year from sysdate) into currentDate from dual; select EXTRACT(year from hire_date) into hire

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

代码如下:

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(从sysdate算起的年份)。 您可以处理这样的异常,例如行太多,并且找不到数据:

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;

我想你需要WHERE子句来获得某个员工。 您可以直接在IF子句中使用函数EXTRACT(从sysdate算起的年份)。 您可以处理这样的异常,例如行太多,并且找不到数据:

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;