如何在 Oracle PL/SQL 中处理“超过请求的行数”
Posted
技术标签:
【中文标题】如何在 Oracle PL/SQL 中处理“超过请求的行数”【英文标题】:How to handle "more than requested number of rows" in Oracle PL/SQL 【发布时间】:2021-02-08 17:31:50 【问题描述】:如果员工工作超过 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;
我该如何处理这个错误?
谢谢!
【问题讨论】:
【参考方案1】:我想你需要 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;
【讨论】:
以上是关于如何在 Oracle PL/SQL 中处理“超过请求的行数”的主要内容,如果未能解决你的问题,请参考以下文章