Bonjour tout le monde
je suis sous Oracle 10g.
je viens de solliciter de votre compréhension sur :
Dans une procédure PL/SQL, comment puis je récupérer, d'une façon dynamique, le nom de la procédure courante en moment de son exécution?
Bonjour tout le monde
je suis sous Oracle 10g.
je viens de solliciter de votre compréhension sur :
Dans une procédure PL/SQL, comment puis je récupérer, d'une façon dynamique, le nom de la procédure courante en moment de son exécution?
Avec le call_stack peut être ? Récupérer la 4ème ligne
Retour
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 CREATE OR REPLACE PROCEDURE wmc2 IS BEGIN dbms_output.put_line('2:format_call_stack:'|| DBMS_UTILITY.format_call_stack); END; CREATE OR REPLACE PROCEDURE wmc1 IS BEGIN dbms_output.put_line('1:format_call_stack:'|| DBMS_UTILITY.format_call_stack); wmc2; dbms_output.put_line('1:format_call_stack:'|| DBMS_UTILITY.format_call_stack); wmc2; END;
En 12, il existe visiblement le package UTL_CALL_STACK
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 1:format_call_stack:----- PL/SQL Call Stack ----- object line object handle number name 0x7863e770 4 procedure MC.WMC1 0x79eb7cb0 1 anonymous block 2:format_call_stack:----- PL/SQL Call Stack ----- object line object handle number name 0x7fd393b0 4 procedure MC.WMC2 0x7863e770 5 procedure MC.WMC1 0x79eb7cb0 1 anonymous block 1:format_call_stack:----- PL/SQL Call Stack ----- object line object handle number name 0x7863e770 6 procedure MC.WMC1 0x79eb7cb0 1 anonymous block 2:format_call_stack:----- PL/SQL Call Stack ----- object line object handle number name 0x7fd393b0 4 procedure MC.WMC2 0x7863e770 7 procedure MC.WMC1 0x79eb7cb0 1 anonymous block
Et ce post : http://stackoverflow.com/questions/2...ect-nameprocid
Merci, McM, d'avoir me donner la tête du file.
mais je ne veux que le nom de la procédure exécutée. est qu'il y a un moyen pour le faire?
Il va falloir coder Islamov
Voici un exemple qui récupère la ligne de l'appelant de la fonction whoami
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 CREATE OR REPLACE FUNCTION whoami RETURN VARCHAR2 IS c VARCHAR2(2001); BEGIN c := DBMS_UTILITY.format_call_stack ||CHR(10); c := SUBSTR(c, INSTR(c, CHR(10), 1, 4)+1); RETURN SUBSTR(c, 22, INSTR(c, CHR(10))-22); END; CREATE OR REPLACE PROCEDURE wmc2 IS BEGIN dbms_output.put_line('2:'|| whoami); END; CREATE OR REPLACE PROCEDURE wmc1 IS BEGIN dbms_output.put_line('1:'|| whoami); wmc2; dbms_output.put_line('1:'|| whoami); wmc2; END;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 1: procedure MC.WMC1 2: procedure MC.WMC2 1: procedure MC.WMC1 2: procedure MC.WMC2
Merci McM d'avoir me répondu à ma préoccupation.
Utilisez $$PLSQL_UNIT
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 SQL> SQL> CREATE OR REPLACE PROCEDURE wmc2 2 IS 3 BEGIN 4 dbms_output.put_line('2:'|| $$plsql_Unit); 5 END; 6 / Procedure created SQL> CREATE OR REPLACE PROCEDURE wmc1 2 IS 3 BEGIN 4 dbms_output.put_line('1:'|| $$plsql_Unit); 5 wmc2; 6 dbms_output.put_line('1:'|| $$plsql_Unit); 7 wmc2; 8 END; 9 / Procedure created SQL> set serveroutput on SQL> exec wmc1 1:WMC1 2:WMC2 1:WMC1 2:WMC2 PL/SQL procedure successfully completed SQL>
Partager