tipos resueltos procedimientos procedimiento funciones example espaƱol ejemplos ejecutar developer bloques almacenado 11g oracle plsql

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; /