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

前端之家收集整理的这篇文章主要介绍了为什么在Oracle中no_data_found ORA-01403是异常?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果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;

为什么?

在我看来,你真的不需要这个例外.这太开销了
有时它是方便的,但你必须写一个整个开始,例外,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调用函数,我希望我的函数失败.我可能会捕获异常来提出一个有意义的错误信息(with raise_application_error),但大多数时候我对ORA-01403感到满意.

一般来说,您应该捕获的唯一例外是预期的异常(即不应该是捕获所有ORA-01403的标准,或者是所有异常).

猜你在找的Oracle相关文章