如何处理PL / SQL中的常规异常

时间:2014-01-17 12:10:18

标签: oracle plsql

我看了谷歌,但在这里找不到答案。

我不想在Oracle中处理所有异常。

我想要的只是获取最后一个语句的返回码并检查它是否为0(零)。如果是,则命令执行正常。如果没有,则出现一些错误,然后我希望该过程退出并发出一条消息,说明只有错误和导致该错误的命令。

提前致谢!

3 个答案:

答案 0 :(得分:2)

如果我正确地解释你的问题,听起来你想要忽略所有异常并在每个语句后手动检查SQLCODE。如果我的理解是正确的,我恐怕在PL / SQL中没有办法做到这一点。当出现错误时,系统会引发异常 - 没有办法绕过它。您可以做的是记录程序执行的位置描述,并从通用异常处理程序打印,类似于以下内容:

PROCEDURE SOME_PROCEDURE IS
  strCheckpoint  VARCHAR2(2000);
  rowSome_table  SOME_TABLE%ROWTYPE;
BEGIN
  strCheckpoint := 'SELECT FROM SOME_TABLE';
  SELECT *
    INTO rowSome_table 
    FROM SOME_TABLE
    WHERE SOME_COLUMN = 42;

  strCheckpoint := 'UPDATE SOME_OTHER_TABLE';
  UPDATE SOME_OTHER_TABLE
    SET A_COLUMN = rowSome_table.A_COLUMN
    WHERE KEY_COLUMN = rowSome_table.KEY_COLUMN;
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Something happened at checkpoint ''' ||
                         strCheckpoint ||
                         ''' SQLCODE=' || SQLCODE ||
                         ' SQLERRM=' || SQLERRM);
    RETURN;
END;  -- SOME_PROCEDURE

分享并享受。

答案 1 :(得分:1)

不确定我的问题是否正确,但这看起来像你需要的吗?

SQL> create function get_number return number
  2  is
  3  begin
  4   return 1;
  5  end;
  6  /


SQL> begin
  2   if get_number != 0 then
  3  raise_application_error(-20000,'Error raised !');
  4  end if;
  5  end;
  6  /
begin
*
Error in line 1:
ORA-20000: Error raised ! 
ORA-06512: на  line 3 

SQL> declare
  2   user_def_exc exception;
  3  begin
  4   if get_number!=0 then
  5     raise user_def_exc;
  6   end if;
  7  exception
  8   when user_def_exc then
  9     dbms_output.put_line('We ave got a problem');
 10  end;
 11  /
We ave got a problem    

答案 2 :(得分:0)

您可以在SQLPLus中使用以下内容:

SQL>whenever sqlerror exit 1

这将在退出值为1

的错误时终止脚本的执行