版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hpdlzu80100/article/details/84194583
本章内容:
1. 利用Oracle提供的包扩展功能(使用UTL_FILE访问文件、使用DBMS_JOB调度作业、DBMS_XPLAN生成解释计划、DBMS_SQL产生隐式语句结果 )
2. 利用Oracle提供的包报告错误(使用DBMS_UTILITY包报告错误、使用UTL_CALL_STACK包报告错误)
代码如下:
1. FORMAT_CALL_STACK (格式化输出执行调用栈)
SQL> -- For Example ch24_7.sql
SQL> CREATE OR REPLACE PROCEDURE first
2 IS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE (DBMS_UTILITY.FORMAT_CALL_STACK);
5 END first;
6 /
Procedure created.
SQL>
SQL> CREATE OR REPLACE PROCEDURE second
2 IS
3 BEGIN
4 first;
5 END second;
6 /
Procedure created.
SQL>
SQL> CREATE OR REPLACE PROCEDURE third
2 IS
3 BEGIN
4 second;
5 END third;
6 /
Procedure created.
SQL>
SQL> BEGIN
2 third;
3 END;
4 /
----- PL/SQL Call Stack -----
object line object
handle number name
00007FFB58E9FE00 4 procedure C##STUDENT.FIRST
00007FFB583C2CE8 4 procedure C##STUDENT.SECOND
00007FFB5E673BD8 4 procedure C##STUDENT.THIRD
00007FFB59EBDFB8 2 anonymous block
2. FORMAT_ERROR_BACKTRACE (格式化输出与当前错误相关联的错误回溯路径)
SQL> -- For Example ch24_8.sql
SQL> CREATE OR REPLACE PROCEDURE first
2 IS
3 v_name VARCHAR2(30);
4 BEGIN
5 DBMS_OUTPUT.PUT_LINE ('procedure FIRST');
6
7 SELECT RTRIM(first_name)||' '||RTRIM(last_name)
8 INTO v_name
9 FROM student
10 WHERE student_id = 1000;
11 END first;
12 /
Procedure created.
SQL>
SQL> CREATE OR REPLACE PROCEDURE second
2 IS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE ('procedure SECOND');
5 first;
6 END second;
7 /
Procedure created.
SQL>
SQL> CREATE OR REPLACE PROCEDURE third
2 IS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE ('procedure THIRD');
5 second;
6 END third;
7 /
Procedure created.
SQL> BEGIN
2 third;
3 EXCEPTION
4 WHEN OTHERS
5 THEN
6 DBMS_OUTPUT.PUT_LINE (DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
7 END;
8 /
procedure THIRD
procedure SECOND
procedure FIRST
ORA-06512: at "C##STUDENT.FIRST", line 7
ORA-06512: at "C##STUDENT.SECOND", line 5
ORA-06512: at "C##STUDENT.THIRD", line 5
ORA-06512: at line 2
3. FORMAT_ERROR_STACK (返回与异常相关联的错误编号和错误信息)
SQL> CREATE OR REPLACE PROCEDURE second
2 IS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE ('procedure SECOND');
5 first;
6 END second;
7 /
Procedure created.
SQL>
SQL> CREATE OR REPLACE PROCEDURE third
2 IS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE ('procedure THIRD');
5 second;
6 END third;
7 /
Procedure created.
SQL>
SQL> BEGIN
2 third;
3 EXCEPTION
4 WHEN OTHERS
5 THEN
6 DBMS_OUTPUT.PUT_LINE ('Error Backtrace:');
7 DBMS_OUTPUT.PUT_LINE ('----------------');
8 DBMS_OUTPUT.PUT_LINE (DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
9
10 DBMS_OUTPUT.PUT_LINE ('Error Stack:');
11 DBMS_OUTPUT.PUT_LINE ('----------------');
12 DBMS_OUTPUT.PUT_LINE (DBMS_UTILITY.FORMAT_ERROR_STACK);
13 END;
14 /
procedure THIRD
procedure SECOND
procedure FIRST
Error Backtrace:
----------------
ORA-06512: at "C##STUDENT.FIRST", line 7
ORA-06512: at "C##STUDENT.SECOND", line 5
ORA-06512: at "C##STUDENT.THIRD", line 5
ORA-06512: at line 2
Error Stack:
----------------
ORA-01403: no data found