Ответ 1
Try:
v_procedure_name := $$PLSQL_UNIT;
Там также $$ PLSQL_LINE, если вы хотите узнать, какой номер строки вы находитесь.
Может ли процедура PL/SQL в Oracle узнать собственное имя?
Позвольте мне объяснить:
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
.
Try:
v_procedure_name := $$PLSQL_UNIT;
Там также $$ PLSQL_LINE, если вы хотите узнать, какой номер строки вы находитесь.
Если вы до 10 г, вы можете "выкопать" (разобрать) его из dbms_utility.format_call_stack Процедуры/функции в пакетах могут быть перегружены (и вложены), поэтому номер/номер пакета обычно лучше, чем имя.
В 10g и 11g я использую функцию owa_util.get_procedure. Обычно я использую это в пакетах, так как он также возвращает имя внутренней процедуры или функции как часть имени пакета, т.е. (Имя_пакета). (Имя процедуры). Я использую это, чтобы предоставить общий шаблон 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;
/