Oracle 11g PL/SQL 使用者自定義 Exception
方法一
宣告 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle PL/SQL中EXCEPTION用法OracleSQLException
- Pl/SQL 自定義型別SQL型別
- 自定義PL/SQL異常SQL
- PL/SQL 08 異常 exceptionSQLException
- Oracle 11g系列:SQL Plus與PL/SQLOracleSQL
- Oracle PL/SQLOracleSQL
- Oracle PL/SQL INDICESOracleSQL
- oracle PL/SQL示例OracleSQL
- sql mode 和使用者自定義分割槽SQL
- Oracle 11g中的Native PL/SQL程式碼編譯OracleSQL編譯
- oracle pl/sql programmingOracleSQL
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-使用者定義的PL/SQL子型別SQL資料型別
- SQL自定義排序SQL排序
- T-SQL、Jet SQL、PL-SQL 的含義SQL
- Oracle 資料庫11g新特性之高效 PL/SQL 編碼Oracle資料庫SQL
- Oracle PL/SQL編寫PL/SQL程式碼的注意事項OracleSQL
- ORACLE之常用FAQ:SQL&PL/SQLOracleSQL
- Laravel Exception結合自定義Log服務的使用LaravelException
- Oracle PL/SQL塊簡介OracleSQL
- Oracle PL/SQL 之 函式OracleSQL函式
- PL/SQL Developer 連線 OracleSQLDeveloperOracle
- oracle INDEX BY Pl/sql陣列OracleIndexSQL陣列
- 【PL/SQL】oracle建立dblinkSQLOracle
- Oracle PL/SQL之GROUP BY CUBEOracleSQL
- Oracle PL/SQL迴圈示例OracleSQL
- 【Oracle】--PL/SQL匯入Oracle sql指令碼"傻瓜教程"OracleSQL指令碼
- SQL Server使用者自定義的資料庫修復SQLServer資料庫
- Spring Cloud Gateway自定義異常處理Exception HandlerSpringCloudGatewayException
- Oracle 的PL/SQL語言使用OracleSQL
- Oracle PL/SQL之 Package介紹OracleSQLPackage
- oracle PL/SQL中的過載OracleSQL
- Oracle PL/SQL語言基礎OracleSQL
- 【Oracle】Windows安裝pl/sql developerOracleWindowsSQLDeveloper
- oracle dbms_profiles分析pl/sqlOracleSQL
- PL/SQL 10 管理使用者子程式SQL
- Spark SQL使用簡介(2)--UDF(使用者自定義函式)SparkSQL函式
- SQL SERVER 自定義函式SQLServer函式
- SQL 自定義函式FUNCTIONSQL函式Function