系列文章目录
Oracle PL/SQL基础语法学习12:短路求值
Oracle PL/SQL基础语法学习13:比较运算符
Oracle PL/SQL基础语法学习14:BOOLEAN表达式
Oracle PL/SQL基础语法学习15:静态表达式
Oracle PL/SQL基础语法学习16:CASE Expression(CASE表达式)
文章目录
- 系列文章目录
- 前言
- Oracle PL/SQL基础语法学习17:Error-Reporting Functions(错误报告函数)
- Error-Reporting Functions(错误报告函数)介绍
- SQLERRM函数
- SQLCODE函数
- 官方文档Error-Reporting Functions(错误报告函数)代码例
- Example 11-23 Displaying SQLCODE and SQLERRM Values
- 总结
- 参考
【免责声明】文章仅供学习交流,观点代表个人,与任何公司无关。
编辑|SQL和数据库技术(ID:SQLplusDB)
前言
PL/SQL是Oracle数据库中的一种嵌入式语言,其功能强大,可以进行存储过程和函数的编写,帮助开发者快速高效地处理数据库操作。
最好的学习是实践加上看官方文档。官方文档中的代码例更是精华和重点所在。
IT行业如此,编程如此,Oracle PL/SQL的学习更是如此。
本系列将以《Database PL/SQL Language Reference》的PL/SQL代码例为主线进行介绍。
Oracle PL/SQL基础语法学习17:Error-Reporting Functions(错误报告函数)
Error-Reporting Functions(错误报告函数)介绍
Error-Reporting Functions(错误报告函数)是PL/SQL 中用来管理和报告错误的函数。这些函数提供了有用的反馈信息,有助于识别和解决PL/SQL查询时出现的各种问题,用于捕获和处理异常。
Oracle中最常见的错误报告函数是SQLCODE、SQLERRM。
SQLERRM函数
SQLERRM函数用于返回与错误代码相关联的错误信息,此函数是面向用户的,因为它返回了可读性更强的描述信息。
例:
SQL> set serverout on
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE('SQLERRM(-6511): ' || TO_CHAR(SQLERRM(-6511)));
3 END;
4 /
SQLERRM(-6511): ORA-06511: PL/SQL: 游标已经打开
PL/SQL 过程已成功完成。
上面代码使用 DBMS_OUTPUT.PUT_LINE 输出 SQLERRM(-6511) 函数的返回值。
可以获取最近一次SQL语句执行的状态码,状态码表示的是SQL语句执行的结果,若为0则表示SQL语句执行成功,否则会返回一个非0数字表示错误的类型。SQLCODE是一个只读变量,无法手动修改。
SQLCODE函数
可以获取最近一次SQL语句执行的状态码,状态码表示的是SQL语句执行的结果,若为0则表示SQL语句执行成功,否则会返回一个非0数字表示错误的类型。SQLCODE是一个只读变量,无法手动修改。
在Oracle中,对于内部定义的异常,其数字代码是相关联的Oracle 数据库的错误编号。除了错误“未找到数据”其数字代码为+100之外,此数字是负数。
对于用户定义的异常,其数字代码为+1(默认)或由EXCEPTION_INIT编译指示中指定的异常关联的错误代码。
官方文档Error-Reporting Functions(错误报告函数)代码例
Example 11-23 Displaying SQLCODE and SQLERRM Values
SQLCODE 和 SQLERRM 函数使用例:
SQL> DROP TABLE errors;
表已删除。
SQL> CREATE TABLE errors (
2 code NUMBER,
3 message VARCHAR2(64)
4 );
表已创建。
SQL>
SQL> CREATE OR REPLACE PROCEDURE p AUTHID DEFINER AS
2 name EMPLOYEES.LAST_NAME%TYPE;
3 v_code NUMBER;
4 v_errm VARCHAR2(64);
5 BEGIN
6 SELECT last_name INTO name
7 FROM EMPLOYEES
8 WHERE EMPLOYEE_ID = -1;
9 EXCEPTION
10 WHEN OTHERS THEN
11 v_code := SQLCODE;
12 v_errm := SUBSTR(SQLERRM, 1, 64);
13 DBMS_OUTPUT.PUT_LINE
14 ('Error code ' || v_code || ': ' || v_errm);
15
16 /* Invoke another procedure,
17 declared with PRAGMA AUTONOMOUS_TRANSACTION,
18 to insert information about errors. */
19
20 INSERT INTO errors (code, message)
21 VALUES (v_code, v_errm);
22 commit;
23 RAISE;
24 END;
25 /
过程已创建。
SQL> exec p;
BEGIN p; END;
*
第 1 行出现错误:
ORA-01403: 未找到任何数据
ORA-06512: 在 "HR.P", line 23
ORA-06512: 在 "HR.P", line 6
ORA-06512: 在 line 1
SQL> select * from errors;
CODE
----------
MESSAGE
--------------------------------------------------------------------------------
100
ORA-01403: 未找到任何数据
SQL>
这段代码创建了一个用于记录错误信息的表errors和一个存储过程p。在存储过程中,使用SELECT语句查询不存在的员工ID,当发生异常时,获取异常代码和错误信息,并打印输出。同时,调用一个使用PRAGMA AUTONOMOUS_TRANSACTION声明的另一个存储过程来将错误信息插入到errors表中。最后使用RAISE语句重新抛出异常。
总结
错误报告函数函数提供了有用的反馈信息,从而可以更加灵活地识别错误并处理异常。合理使用错误报告函数可以大大提高数据操作的可靠性和安全性。
参考
2.8 Error-Reporting Functions
13.63 SQLERRM Function
13.62 SQLCODE Function