如果员工工作超过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年)。并且您可以处理诸如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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句