IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Récupérer le nom d'un procédure d'une façon dynamique


Sujet :

PL/SQL Oracle

  1. #1
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut Récupérer le nom d'un procédure d'une façon dynamique
    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.

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Avec le call_stack peut être ? Récupérer la 4ème ligne

    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;
    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
    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
    En 12, il existe visiblement le package UTL_CALL_STACK

    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

  3. #3
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    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.

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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

  5. #5
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    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.

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    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>

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    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.

  9. #9
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer le nom d'un fichier dans une cellule
    Par NicolasJolet dans le forum Excel
    Réponses: 4
    Dernier message: 08/02/2008, 09h47
  2. récupérer un nom de bouton radio ds une variable
    Par dmalik dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/06/2007, 17h22
  3. Récupérer le nom du fichier qui appelle une fonction
    Par DeezerD dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2007, 14h37
  4. Récupérer le nom de la feuille d'une cellule appelante
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/10/2006, 20h12
  5. [VBA-E]récupérer le nom des lignes sélectionnées d'une listbox
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/06/2006, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo