programing

Oracle PL/SQL: 스택 트레이스, 패키지 이름 및 프로시저 이름을 가져오는 방법

bestprogram 2023. 2. 26. 16:25

Oracle PL/SQL: 스택 트레이스, 패키지 이름 및 프로시저 이름을 가져오는 방법

예외는 "ORA-06502: PL/SQL: 숫자 또는 값 오류: 문자열 버퍼가 너무 작음"과 같은 결과를 반환할 수 있습니다.

표, 열 및 쓰려고 한 값이 모두 보고되지 않기 때문에 읽을 수 없습니다.

예외가 발생했거나 캐치된 시점에서 현재 프로시저 이름을 취득하는 것이 편리합니다.

저는 그것을 어떻게 얻을 수 있을까요?

아마 기능을 원할 것이다.

SQL> ed
Wrote file afiedt.buf

  1  create or replace procedure p1
  2  is
  3  begin
  4    raise_application_error( -20001, 'Error 1', true );
  5* end;
SQL> /

Procedure created.

SQL> create or replace procedure p2
  2  as
  3  begin
  4    null;
  5    p1;
  6  end;
  7  /

Procedure created.

SQL> begin
  2    p2;
  3  exception
  4    when others then
  5      dbms_output.put_line( dbms_utility.format_error_backtrace );
  6  end;
  7  /
ORA-06512: at "SCOTT.P1", line 4
ORA-06512: at "SCOTT.P2", line 5
ORA-06512: at
line 2


PL/SQL procedure successfully completed.

DBMS_UTILITY를 조합하여 사용합니다.FORMAT_ERROR_STACK 및 DBMS_UTILITY.FORMAT_ERROR_BACKTRACE.(Justin Cave의 답변 개선)

when others then
  Dbms_Output.put_line ( DBMS_UTILITY.FORMAT_ERROR_STACK() );
  Dbms_Output.put_line ( DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() );

그러면 첫 번째 줄과 다음 줄의 스택에 오류가 표시됩니다(Justin Cave가 제시한 예에서 출력).

ORA-20001: Error 1
ORA-06512: at "SCOTT.X1", line 4
ORA-06512: at "SCOTT.X2", line 5
ORA-06512: at line 2

또는 시도하다

또는 를 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/7032373/oracle-pl-sql-how-to-get-the-stack-trace-package-name-and-procedure-name