本文共 1580 字,大约阅读时间需要 5 分钟。
方法一 声明 exception --创建存储过程 SQL> create procedure account_status ( 2 due_date date, 3 today date 4 ) authid definer 5 is 6 past_due exception; -- 定义异常 7 begin 8 if due_date < today then 9 raise past_due; -- 声明异常 10 end if; 11 exception 12 when past_due then -- 异常处理 13 dbms_output.put_line('Account past due.'); 14 end; 15 / 过程已创建。 调用存储过程,来触发异常 SQL> set serveroutput on SQL> l 1 begin 2 account_status(sysdate-1,sysdate); 3* end; SQL> / Account past due. PL/SQL 过程已成功完成。 SQL> begin 2 account_status(sysdate-1,sysdate+1); 3 end; 4 / Account past due. PL/SQL 过程已成功完成。 SQL> begin 2 account_status(sysdate-1,sysdate-2); 3 end; 4 / PL/SQL 过程已成功完成。 方法二 使用 raise_application_error 包 SQL> create or replace procedure account_status ( 2 due_date date, 3 today date 4 ) authid definer 5 is 6 begin 7 if due_date < today then -- explicitly raise exception 8 raise_application_error(-20000, 'Account past due.'); 9 end if; 10 end; 11 / 过程已创建。 SQL> begin 2 account_status(sysdate-1,sysdate); 3 end; 4 / begin * 第 1 行出现错误: ORA-20000: Account past due. ORA-06512: 在 "SCOTT.ACCOUNT_STATUS", line 8 ORA-06512: 在 line 2 SQL> declare 2 past_due exception; --declare exception 3 pragma exception_init (past_due, -20000); --assign error code to exception 4 begin 5 account_status(sysdate-1,sysdate); --invoke procedure 6 exception 7 when past_due then 8 dbms_output.put_line(to_char(sqlerrm(-20000))); 9 end; 10 / ORA-20000: Account past due. PL/SQL 过程已成功完成。 来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26506993/viewspace-1985904/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26506993/viewspace-1985904/