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?
d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
ça encourage.
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
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
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?
d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
ça encourage.
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
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
Merci McM d'avoir me répondu à ma préoccupation.
d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
ça encourage.
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>
Merci Mnitu.
J'ai vu que pour les packages, ça donne le nom du package (pas de la fonction ou procédure) : https://community.oracle.com/thread/1042794
Et qu'on peut retrouver la ligne exacte avec $$plsql_line
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
Ca a évolué encore en 12c avec l'apparition du UTL_CALL_STACK qui permet maintenant d'obtenir le noms de procédures à l'intérieur des packages et autres informations.
Merci mnitu, c'est une information en plus, je ne peux pas l'utiliser car je suis sous la 10g.
d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
ça encourage.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager