《Oracle PL/SQL实例精讲》学习笔记25——Oracle提供的包 (第五部分——使用DBMS_UTILITY报告错误)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/hpdlzu80100/article/details/84194583