方法一
声明 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 过程已成功完成。
声明 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/