tipos salida procedimientos procedimiento parametros funciones example ejemplos ejecutar con bloques bloque anonimo almacenado oracle function plsql procedure

salida - procedimientos y funciones oracle pl/sql



Obtenga el nombre del procedimiento o funciĆ³n de llamada en Oracle PL/SQL (2)

¿Alguien sabe si es posible que un procedimiento PL / SQL (un registro de error en este caso) obtenga el nombre de la función / procedimiento que lo llamó?

Obviamente, podría pasar el nombre como un parámetro, pero sería bueno hacer una llamada al sistema o algo para obtener la información; podría devolver un valor nulo o algo si no se llamó desde un procedimiento / función.

Si no hay un método para esto, está bien, solo curiosidad si es posible (las búsquedas no producen nada).


Hay un paquete llamado OWA_UTIL (que no está instalado por defecto en versiones anteriores de la base de datos). Tiene un método WHO_CALLED_ME() que devuelve el PROPIETARIO, OBJECT_NAME, LINE_NO y CALLER_TYPE. Tenga en cuenta que si la persona que llama es un procedimiento empaquetado, devolverá el nombre PAQUETE no el nombre del procedimiento. En este caso, no hay forma de obtener el nombre del procedimiento; esto se debe a que el nombre del procedimiento puede estar sobrecargado, por lo que no es necesariamente muy útil.

Descubra más .

Desde 10gR2 también existe la función especial $$PLSQL_UNIT ; esto también devolverá el NOMBRE DEL OBJETO (es decir, el procedimiento del paquete no empaquetado).


Encontré este foro: http://www.orafaq.com/forum/t/60583/0/ . Puede ser lo que estás buscando.

Básicamente, puede usar el dbms_utility.format_call_stack suministrado por Oracle:

scott@ORA92> CREATE TABLE error_tab 2 (who_am_i VARCHAR2(61), 3 who_called_me VARCHAR2(61), 4 call_stack CLOB) 5 / Table created. scott@ORA92> scott@ORA92> CREATE OR REPLACE PROCEDURE d 2 AS 3 v_num NUMBER; 4 v_owner VARCHAR2(30); 5 v_name VARCHAR2(30); 6 v_line NUMBER; 7 v_caller_t VARCHAR2(100); 8 BEGIN 9 select to_number(''a'') into v_num from dual; -- cause error for testing 10 EXCEPTION 11 WHEN OTHERS THEN 12 who_called_me (v_owner, v_name, v_line, v_caller_t); 13 INSERT INTO error_tab 14 VALUES (who_am_i, 15 v_owner || ''.'' || v_name, 16 dbms_utility.format_call_stack); 17 END d; 18 / Procedure created. scott@ORA92> SHOW ERRORS No errors. scott@ORA92> CREATE OR REPLACE PROCEDURE c 2 AS 3 BEGIN 4 d; 5 END c; 6 / Procedure created. scott@ORA92> CREATE OR REPLACE PROCEDURE b 2 AS 3 BEGIN 4 c; 5 END b; 6 / Procedure created. scott@ORA92> CREATE OR REPLACE PROCEDURE a 2 AS 3 BEGIN 4 b; 5 END a; 6 / Procedure created. scott@ORA92> execute a PL/SQL procedure successfully completed. scott@ORA92> COLUMN who_am_i FORMAT A13 scott@ORA92> COLUMN who_called_me FORMAT A13 scott@ORA92> COLUMN call_stack FORMAT A45 scott@ORA92> SELECT * FROM error_tab 2 / WHO_AM_I WHO_CALLED_ME CALL_STACK ------------- ------------- --------------------------------------------- SCOTT.D SCOTT.C ----- PL/SQL Call Stack ----- object line object handle number name 6623F488 1 anonymous block 66292138 13 procedure SCOTT.D 66299430 4 procedure SCOTT.C 6623D2F8 4 procedure SCOTT.B 6624F994 4 procedure SCOTT.A 66299984 1 anonymous block scott@ORA92>