2008-11-13 41 views
15

¿Puede el procedimiento PL/SQL en Oracle saber su propio nombre?Averiguar el nombre del procedimiento PL/SQL

Me explico:

CREATE OR REPLACE procedure some_procedure is 
    v_procedure_name varchar2(32); 
begin 
    v_procedure_name := %%something%%; 
end; 

Después de %%something%% ejecuta, variables v_procedure_name debe contener 'SOME_PROCEDURE'. También está bien si contiene object_id de ese procedimiento, entonces puedo buscar el nombre en all_objects.

Respuesta

26

Probar:

v_procedure_name := $$PLSQL_UNIT; 

También hay $$ PLSQL_LINE si desea saber qué número de línea que se encuentra.

+5

Solo devuelve el nombre del procedimiento para procedimientos y funciones independientes, si se llama desde un procedimiento empaquetado, devuelve el nombre del paquete. – pablo

+1

De hecho. Ligeramente irritante – cagcowboy

3

Si usted es pre-10g, se puede 'cavar' (análisis sintáctico) fuera de dbms_utility.format_call_stack procedimientos/funciones en paquetes pueden ser sobrecargados (y anidada), por lo que el nombre del paquete número/línea es normalmente mejor que el nombre

2

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, (nombre_del_paquete). (Nombre del procedimiento). Utilizo esto para proporcionar una plantilla genérica EXCEPTION 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; 
/
+0

Esto acaba de devolver nulo cuando lo probé. – dcp

Cuestiones relacionadas