【问题标题】:Handling PL/SQL Errors: Catch an exception and don't throw it处理 PL/SQL 错误:捕获异常而不抛出异常
【发布时间】:2018-03-23 01:22:54
【问题描述】:

我有一个抛出这个异常的过程

error_stack -> ORA-00030: El identificador de sesión del usuario no existe.
 error_backtrace -> ORA-06512: en "OF_OWNER.GET_INVOICES", línea 46
 call_stack -> ----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
00000010DB020548        59  procedure OF_OWNER.GET_INVOICES
000000112A537E58         2  anonymous block

但我不希望程序在这种情况下引发任何异常,我已经尝试过

 ...
 WHEN  'ORA-00030' THEN
 WHEN OTHERS
 ...

但是我遇到了编译错误

【问题讨论】:

  • 试试这个exception WHEN OTHERS THEN IF SQLCODE != -00030THEN DBMS_OUTPUT.PUT_LINE( 'There is an error' );
  • 出于好奇 - 为什么要忽略该错误?这是没有意义的——如果你的程序没有引发错误,那么肯定会出现其他问题,因为会话不再存在。

标签: sql oracle stored-procedures plsql oracle12c


【解决方案1】:

要么:

BEGIN
  do something
EXCEPTION WHEN OTHERS THEN
  IF SQLCODE = -30 THEN
    NULL; -- ignore this particular exception
  ELSE
    RAISE; -- but throw the others
  END IF;
END; 

或者:

DECLARE
  ORA00030 EXCEPTION; -- or any other name you like instead of ORA00030
  pragma EXCEPTION_INIT(ORA00030, -30); -- link your exception name to the code
BEGIN
  do something
EXCEPTION WHEN ORA00030 THEN
  NULL; -- ignore this particular exception
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 2016-02-17
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2020-10-03
    相关资源
    最近更新 更多