问题描述
嗨,汤姆,
即使其中一条select语句失败,也可以在过程中执行所有select语句吗?我的意思是,如果其中一个select语句失败,只有
语句不应显示输出,但如果语句的其余部分没有错误,则过程中的其余语句应按预期工作。
Actual OutPUT
Expected Output :
问候,
N
即使其中一条select语句失败,也可以在过程中执行所有select语句吗?我的意思是,如果其中一个select语句失败,只有
语句不应显示输出,但如果语句的其余部分没有错误,则过程中的其余语句应按预期工作。
CREATE OR REPLACE PROCEDURE bad_proc
IS
x INT;
BEGIN
SELECT 1 INTO x FROM dual;
dbms_output.put_line(x);
SELECT 2 INTO x FROM dual;
dbms_output.put_line(x);
SELECT 4/0 INTO x FROM dual;
dbms_output.put_line(x);
SELECT 5 INTO x FROM dual;
dbms_output.put_line(x);
SELECT 6 INTO x FROM dual;
dbms_output.put_line(x);
EXCEPTION
WHENzero_divide THEN
dbms_output.put_line('HELP - I DIED HERE=>'||dbms_utility.format_error_backtrace );
END;
/
set serveroutput on;
exec BAD_PROC;Actual OutPUT
PL/SQL procedure successfully completed. 1 2 HELP - I DIED HERE=>ORA-06512: at "HR.BAD_PROC", line 9
Expected Output :
PL/SQL procedure successfully completed. 1 2 HELP - I DIED HERE=>ORA-06512: at "HR.BAD_PROC", line 9 5 6
问候,
N
专家解答
将每个SQL语句包装在自己的begin...例外...端块:
CREATE OR REPLACE PROCEDURE bad_proc
IS
x INT;
BEGIN
begin
SELECT 1 INTO x FROM dual;
dbms_output.put_line(x);
EXCEPTION
WHEN zero_divide THEN
dbms_output.put_line('HELP - I DIED HERE=>'||dbms_utility.format_error_backtrace );
end;
begin
SELECT 2 INTO x FROM dual;
dbms_output.put_line(x);
EXCEPTION
WHEN zero_divide THEN
dbms_output.put_line('HELP - I DIED HERE=>'||dbms_utility.format_error_backtrace );
end;
begin
SELECT 4/0 INTO x FROM dual;
dbms_output.put_line(x);
EXCEPTION
WHEN zero_divide THEN
dbms_output.put_line('HELP - I DIED HERE=>'||dbms_utility.format_error_backtrace );
end;
begin
SELECT 5 INTO x FROM dual;
dbms_output.put_line(x);
EXCEPTION
WHEN zero_divide THEN
dbms_output.put_line('HELP - I DIED HERE=>'||dbms_utility.format_error_backtrace );
end;
begin
SELECT 6 INTO x FROM dual;
dbms_output.put_line(x);
EXCEPTION
WHEN zero_divide THEN
dbms_output.put_line('HELP - I DIED HERE=>'||dbms_utility.format_error_backtrace );
end;
END;
/
set serveroutput on;
exec BAD_PROC;
1
2
HELP - I DIED HERE=>ORA-06512: at "CHRIS.BAD_PROC", line 20
5
6
PL/SQL procedure successfully completed. 文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




