반응형
PL/SQL 프로시저 이름 찾기
Oracle의 PL/SQL 프로시저가 자체 이름을 알 수 있습니까?
설명하겠습니다.
CREATE OR REPLACE procedure some_procedure is
v_procedure_name varchar2(32);
begin
v_procedure_name := %%something%%;
end;
끝나고%%something%%
실행, 변수v_procedure_name
'SOME_PROCEDURE'를 포함해야 합니다.다음을 포함하는 경우에도 괜찮습니다.object_id
그 절차의, 그래서 나는 이름을 찾을 수 있습니다.all_objects
.
시도:
v_procedure_name := $$PLSQL_UNIT;
어떤 라인 번호에 있는지 알고 싶다면 $$PLSQL_LINE도 있습니다.
10g 이전의 경우 dbms_utility에서 '파기'(parse)할 수 있습니다.format_call_stack 패키지의 프로시저/함수를 오버로드(및 중첩)할 수 있으므로 일반적으로 패키지 이름/라인 번호가 이름보다 좋습니다.
10g과 11g에서는 "owa_util.get_procedure" 함수를 사용합니다.패키지 이름의 일부(예: (package_name)로 내부 프로시저 또는 함수의 이름을 반환하기 때문에 일반적으로 패키지에서 사용합니다.(가칭).일반 정보를 제공하는 데 사용합니다.EXCEPTION
예외가 발생한 위치를 식별하기 위한 템플릿입니다.
CREATE OR REPLACE procedure some_procedure is
v_procedure_name varchar2(32);
begin
v_procedure_name := owa_util.get_procedure;
end;
CREATE OR REPLACE PACKAGE some_package
AS
FUNCTION v_function_name
RETURN DATE;
END;
/
CREATE OR REPLACE PACKAGE BODY some_package
AS
FUNCTION v_function_name
RETURN DATE
IS
BEGIN
RETURN SYSDATE;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR IN '||owa_util.get_procedure);
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
END;
/
REGEXP_SUBSTR의 장점을 살린 깔끔한 기능이 있습니다.패키지에서 테스트해 본 적이 있으며 패키지의 다른 절차에서 호출해도 작동합니다.
FUNCTION SET_PROC RETURN VARCHAR2 IS
BEGIN
RETURN NVL(REGEXP_SUBSTR(DBMS_UTILITY.FORMAT_CALL_STACK,
'procedure.+\.(.+)\s', 1,1,'i',1), 'UNDEFINED');
END SET_PROC;
언급URL : https://stackoverflow.com/questions/286549/find-out-name-of-pl-sql-procedure
반응형
'source' 카테고리의 다른 글
Python 웹 프레임워크, WSGI 및 CGI의 적합성 (0) | 2023.07.16 |
---|---|
ORA-03113: ASP.Net 앱에서 장시간 비활성화 후 통신 채널의 파일 종료 (0) | 2023.07.16 |
"int mask = ~0;"의 목적은 무엇입니까? (0) | 2023.07.16 |
SQL Server 데이터베이스 테이블에 데이터 테이블을 삽입하는 방법은 무엇입니까? (0) | 2023.07.16 |
동적 SQL 문에서 테이블 변수를 사용하는 방법은 무엇입니까? (0) | 2023.07.16 |