source

PL/SQL 프로시저 이름 찾기

ittop 2023. 7. 16. 17:56
반응형

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

반응형