gpt4 book ai didi

sql - 为什么no_data_found ORA-01403是Oracle中的异常?

转载 作者:行者123 更新时间:2023-12-03 13:17:16 25 4
gpt4 key购买 nike

如果SELECT INTO语句没有返回至少一行,则抛出ORA-01403。

对于其他所有DBMS,我都知道这在SELECT上是正常的。
只有Oracle这样对待SELECT INTO。

CREATE OR REPLACE PROCEDURE no_data_proc IS
dummy dual.dummy%TYPE;
BEGIN
BEGIN
SELECT dummy
INTO dummy
FROM dual
WHERE dummy = 'Y';
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('Why is this needed?');
END;
END no_data_proc;

为什么?

我认为您实际上不需要此异常。这是太多的开销。
有时很方便,但是您必须编写一个完整的BEGIN,EXCEPTION,WHEN,END块。

有没有我看不到的根本原因?

最佳答案

不需要异常块,您可以根据情况使用或不使用它。

在这里,您正在积极地忽略该异常(该过程将成功返回),但是在大多数情况下,如果您正在执行SELECT INTO,则希望它不返回一行就使其失败,而失败,请考虑:

PROCEDURE update_employee_salary (p_empno) IS
l_salary NUMBER;
BEGIN
SELECT sal INTO l_salary FROM emp WHERE empno = p_empno FOR UPDATE;
/* do something with emp data */
END;

在这里,我希望函数被EMP表中不存在的 empno调用时失败。我可能会捕获异常,以引发有意义的错误消息(带有 raise_application_error),但是大多数时候我对ORA-01403感到满意。

通常,您应该捕获的唯一异常是预期的异常(即,这不应成为捕获所有ORA-01403或与此相关的所有异常的标准)。

关于sql - 为什么no_data_found ORA-01403是Oracle中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3940522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com