更新时间:2026-10-21 GMT+08:00
分享

获取有关错误的信息

可以通过使用GET STACKED DIAGNOSTICS语句,查询当前PL/SQL函数执行过程中的异常信息。

语法

GET STACKED DIAGNOSTICS {{variable { = | := } item }[ , ... ]};

语法图如图1所示。

图1 获取有关错误信息语法

其中,item表示异常专用的诊断项,目前可用的诊断项包括:

  • PG_EXCEPTION_DETAIL:详细错误信息。
  • PG_EXCEPTION_HINT:错误提示。
  • PG_EXCEPTION_CONTEXT:异常的调用栈信息。
  • MESSAGE_TEXT:主要错误信息。
  • RETURNED_SQLSTATE:异常的SQLSTATE错误代码。

示例

gaussdb=# CREATE TABLE diag_table(int_col int, str_col varchar2);
CREATE TABLE
gaussdb=# CREATE OR REPLACE PROCEDURE get_diag_proc() AS
DECLARE
    sql_state text;
    message_text text;
    pg_exception_detail text;
    pg_exception_hint text;
    pg_exception_context text;
BEGIN
    UPDATE diag_table set int_col = 'aaa';
    EXCEPTION WHEN others THEN
        GET STACKED DIAGNOSTICS sql_state = returned_sqlstate;
        GET STACKED DIAGNOSTICS message_text = message_text;
        GET STACKED DIAGNOSTICS pg_exception_detail = pg_exception_detail;
        GET STACKED DIAGNOSTICS pg_exception_hint = pg_exception_hint;
        GET STACKED DIAGNOSTICS pg_exception_context = pg_exception_context;
        raise info 'sql_state: %, message_text: %', sql_state, message_text;
END;
/
CREATE PROCEDURE
gaussdb=# CALL get_diag_proc();
INFO:  sql_state: 22P02, message_text: invalid input syntax for integer: "aaa"
 get_diag_proc
---------------

(1 row)

gaussdb=# DROP TABLE diag_table;
DROP TABLE
gaussdb=# DROP PROCEDURE get_diag_proc();
DROP PROCEDURE

相关文档