Oracle PL/SQL에서 호출 프로시저 또는 함수의 이름을 가져옵니다.
PL/SQL 프로시저(이 경우 오류를 기록하는 프로시저)가 이를 호출한 함수/프로시저의 이름을 가져올 수 있는지 아는 사람이 있습니까?
분명히 이름을 매개 변수로 전달할 수 있지만, 시스템 호출이나 정보를 얻기 위한 무언가를 하면 좋을 것입니다. 절차/함수에서 호출되지 않으면 null이나 무언가를 반환할 수 있습니다.
이에 대한 방법이 없다면 괜찮습니다. 가능한지 궁금할 뿐입니다(검색 결과 아무것도 나오지 않습니다).
라는 패키지가 있습니다.OWA_UTIL(이전 버전의 데이터베이스에서는 기본적으로 설치되지 않음).이것은 방법이 있습니다.WHO_CALLED_ME()OWNER, OBJECT_NAME, LINE_NO 및 CALLER_TYPE을 반환합니다.호출자가 패키지 프로시저인 경우 프로시저 이름이 아닌 패키지 이름을 반환합니다.이 경우 프로시저 이름을 가져올 방법이 없습니다. 프로시저 이름이 오버로드될 수 있기 때문에 그다지 유용하지는 않습니다.
자세히 알아보세요.
10gR2 이후에는 또한 있습니다.$$PLSQL_UNIT특수 기능. OBJECT NAME(객체 이름)도 반환됩니다(즉, 패키지 미포장 프로시저).
저는 이 포럼을 찾았습니다: http://www.orafaq.com/forum/t/60583/0/ .그것은 당신이 보고 있는 것일 수도 있습니다.
기본적으로 제공된 Oracle을 사용할 수 있습니다.dbms_utility.format_call_stack:
scott@ORA92> CREATE TABLE error_tab
2 (who_am_i VARCHAR2(61),
3 who_called_me VARCHAR2(61),
4 call_stack CLOB)
5 /
Table created.
scott@ORA92>
scott@ORA92> CREATE OR REPLACE PROCEDURE d
2 AS
3 v_num NUMBER;
4 v_owner VARCHAR2(30);
5 v_name VARCHAR2(30);
6 v_line NUMBER;
7 v_caller_t VARCHAR2(100);
8 BEGIN
9 select to_number('a') into v_num from dual; -- cause error for testing
10 EXCEPTION
11 WHEN OTHERS THEN
12 who_called_me (v_owner, v_name, v_line, v_caller_t);
13 INSERT INTO error_tab
14 VALUES (who_am_i,
15 v_owner || '.' || v_name,
16 dbms_utility.format_call_stack);
17 END d;
18 /
Procedure created.
scott@ORA92> SHOW ERRORS
No errors.
scott@ORA92> CREATE OR REPLACE PROCEDURE c
2 AS
3 BEGIN
4 d;
5 END c;
6 /
Procedure created.
scott@ORA92> CREATE OR REPLACE PROCEDURE b
2 AS
3 BEGIN
4 c;
5 END b;
6 /
Procedure created.
scott@ORA92> CREATE OR REPLACE PROCEDURE a
2 AS
3 BEGIN
4 b;
5 END a;
6 /
Procedure created.
scott@ORA92> execute a
PL/SQL procedure successfully completed.
scott@ORA92> COLUMN who_am_i FORMAT A13
scott@ORA92> COLUMN who_called_me FORMAT A13
scott@ORA92> COLUMN call_stack FORMAT A45
scott@ORA92> SELECT * FROM error_tab
2 /
WHO_AM_I WHO_CALLED_ME CALL_STACK
------------- ------------- ---------------------------------------------
SCOTT.D SCOTT.C ----- PL/SQL Call Stack -----
object line object
handle number name
6623F488 1 anonymous block
66292138 13 procedure SCOTT.D
66299430 4 procedure SCOTT.C
6623D2F8 4 procedure SCOTT.B
6624F994 4 procedure SCOTT.A
66299984 1 anonymous block
scott@ORA92>
기본적으로 변수를 정의하고 유틸리티 메서드로 호출하여 값을 채우기만 하면 됩니다.
create or replace procedure some_test_proc (p_some_int int)
is
owner_name VARCHAR2 (100);
caller_name VARCHAR2 (100);
line_number NUMBER;
caller_type VARCHAR2 (100);
begin
....
OWA_UTIL.WHO_CALLED_ME (owner_name,caller_name,line_number,caller_type);
-- now you can insert those values along with systimestamp into a log file
....
end;
언급URL : https://stackoverflow.com/questions/7273982/get-the-name-of-the-calling-procedure-or-function-in-oracle-pl-sql
'programing' 카테고리의 다른 글
| 유형 스크립트의 선택적 클래스 구성원 (0) | 2023.07.01 |
|---|---|
| HTTP 오류 500.22 - 내부 서버 오류(통합 관리 파이프라인 모드에서 적용되지 않는 ASP.NET 설정이 탐지되었습니다.) (0) | 2023.07.01 |
| 테이블의 행 크기 결정 (0) | 2023.07.01 |
| SQLPLUS 오류:ORA-12504: TNS: 수신기에 CONNECT_DATA의 SERVICE_NAME이 지정되지 않았습니다. (0) | 2023.07.01 |
| 스프링 부트:JPA/Hibernate 주석에서 DDD 엔티티를 깨끗하게 유지하는 방법은 무엇입니까? (0) | 2023.07.01 |