oracle - resueltos - Descubra el nombre del procedimiento PL/SQL
procedimientos y funciones oracle pl/sql (3)
¿Puede el procedimiento PL / SQL en Oracle saber su propio nombre?
Dejame explicar:
CREATE OR REPLACE procedure some_procedure is
v_procedure_name varchar2(32);
begin
v_procedure_name := %%something%%;
end;
Después de ejecutar %%something%%
, la variable v_procedure_name
debe contener ''SOME_PROCEDURE''. También está bien si contiene object_id
de ese procedimiento, por lo que puedo buscar el nombre en all_objects
.
Si eres pre-10g, puedes ''excavar'' (analizar) fuera de dbms_utility.format_call_stack Los procedimientos / funciones en los paquetes pueden estar sobrecargados (y anidados), por lo que el nombre / número de línea del paquete es normalmente mejor que el nombre.
Tratar:
v_procedure_name := $$PLSQL_UNIT;
También hay $$ PLSQL_LINE si quieres saber en qué número de línea estás.
En 10g y 11g utilizo la función "owa_util.get_procedure". Normalmente uso esto en paquetes, ya que también devolverá el nombre de un procedimiento interno o función como parte del nombre del paquete, es decir, (package_name). (Procedure name). Utilizo esto para proporcionar una plantilla EXCEPTION
genérica para identificar dónde ocurrió una excepción.
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;
/