FORMAT_ERROR_BACKTRACE 関数 - 直近のエラー発生時の呼び出しスタックの説明を返す
FORMAT_ERROR_BACKTRACE 関数は、現行セッション中に SQL ルーチンで直近のエラーが発生したときの呼び出しスタックの状態を表すタイプ VARCHAR(32672) のストリングを返します。
許可
結果の各行は、エラー発生時の呼び出しスタック上のアクティブ・ルーチンの説明です。最後に呼び出されたルーチンが最初の行に示され、それより前に呼び出されたルーチンは続きの行に示されます。 すなわち、先頭に最も深くネストされたルーチン、次にそのルーチンの呼び出し元、次にその呼び出し元の呼び出し元 (以降同様) と続く、エラー発生時の呼び出しチェーンが結果に記述されます。
現行セッション中にエラーが発生した SQL ルーチンがない場合、この関数は NULL を返します。
呼び出しスタックの各行の先頭は、ルーチンの先頭行 (行 1) からの相対位置を示す行番号です。そのルーチンの行番号情報を取得できない場合、その行はハイフン (「-」) で示されます。
行番号の後に、ルーチン・タイプがプロシージャー、関数、トリガー、または無名ブロック (コンパウンド・ステートメント) として示されます。 外部ルーチンも示されますが、外部プロシージャーと外部関数との間の区別はされません。 外部ルーチンの場合は、行番号情報を取得できません。
ルーチン・タイプに続いて、ルーチン・スキーマ、モジュール名 (該当する場合)、ルーチン名、そしてサブルーチン名 (該当する場合) からなる完全修飾ルーチン名が示されます。ルーチンの完全修飾名の後に、その特定名が報告されます。 特定名のスキーマは報告されず、完全修飾ルーチン名に含まれるものと同じと見なされます。
DBMS_UTILITY モジュールに対する EXECUTE 特権。
例
create table T1(C1 integer, C2 integer, tag varchar(32)) @
insert into T1 values (1, 6, 'VI'), (2, 10, 'X'), (3, 11, 'XI'), (4, 48, 'XLVIII') @
create or replace procedure B(
in colname varchar(128),
in value integer,
in tag varchar(32))
language SQL
begin
declare stmt_text varchar(256);
declare S1 statement;
set stmt_text = 'update T1 set tag = ? where ' || colname || ' = ?';
prepare S1 from stmt_text;
execute S1 using tag, value;
end @
create or replace procedure A()
begin
call B('C1', 1, 'six');
call B('C2', 11, 'eleven');
call B('C3', 0, 'zero'); -- will produce an error
call B('C2', 48, 'forty-eight');
end @
begin
call A;
end @
Db21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned:
SQL0206N "C3" is not valid in the context where it is used. SQLSTATE=42703 エラーの発生後、FORMAT_ERROR_BACKTRACE は、以下のような情報を返します。
values dbms_utility.format_error_backtrace()
1
-----------------------------------------------------------------------//--
11 procedure MYSCHEMA.B (specific SQL150217153622825); SQLCODE=-206
5 procedure MYSCHEMA.A (specific SQL150217153623026)
2 anonymous block (specific SQL150217153624330)
1 record(s) selected.
