我看了谷歌,但在这里找不到答案。
我不想在Oracle中处理所有异常。
我想要的只是获取最后一个语句的返回码并检查它是否为0(零)。如果是,则命令执行正常。如果没有,则出现一些错误,然后我希望该过程退出并发出一条消息,说明只有错误和导致该错误的命令。
提前致谢!
答案 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
的错误时终止脚本的执行