为什么在Oracle中no_data_found ORA-01403是异常?
发布时间:2020-12-12 13:47:48 所属栏目:百科 来源:网络整理
导读:如果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
如果SELECT INTO语句不返回至少一行,则抛出ORA-01403.
对于每个其他DBMS,我知道这是一个SELECT的正常. 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; 为什么? 在我看来,你真的不需要这个例外.这太开销了 有没有什么重要的原因我看不到? 不需要异常块,您可以根据上下文使用它.在这里,您主动忽略异常(程序将成功返回),但大多数情况下,如果您正在执行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调用该函数,我希望我的函数失败.我可能会捕获异常来提出一个有意义的错误信息(with raise_application_error),但大多数时候我对ORA-01403感到满意. 一般来说,您应该捕获的唯一例外是预期的异常(即不应该是捕获所有ORA-01403的标准,或者是所有异常). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |