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ération de la procédure appelante


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 18
    Par défaut Récupération de la procédure appelante
    Bonjour,
    Je souhaiterai savoir si à l'intérieur d'une procédure stockée, il est possible de récupérer le nom de la procédure appelante (sans passer le nom de la proc en paramètre bien sur).
    Je suis sous Oracle 8i

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

    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
    Billets dans le blog
    4
    Par défaut
    J'avais trouvé ça à un moment (mais je ne sais plus où)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE FUNCTION WHO_AM_I RETURN VARCHAR2
    IS
        l_owner     VARCHAR2(30);
        l_name      VARCHAR2(30);
        l_lineno    NUMBER;
        l_type      VARCHAR2(30);
    BEGIN
       who_called_me(l_owner, l_name, l_lineno, l_type);
       RETURN l_owner || '.' || l_name;
    END;
    /
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    CREATE OR REPLACE PROCEDURE WHO_CALLED_ME( owner      OUT VARCHAR2,
                                               v_name     OUT VARCHAR2,
                                               lineno     OUT NUMBER,
                                               caller_t   OUT VARCHAR2 )
    AS
        call_stack  VARCHAR2(4096) DEFAULT DBMS_UTILITY.FORMAT_CALL_STACK;
        n           NUMBER;
        found_stack BOOLEAN DEFAULT FALSE;
        line        VARCHAR2(255);
        cnt         NUMBER := 0;
    BEGIN
        LOOP
            n := INSTR(call_stack, CHR(10));
            EXIT WHEN (cnt = 3 OR n IS NULL OR n = 0);
            line := SUBSTR(call_stack, 1, n-1 );
            call_stack := SUBSTR(call_stack, n+1);
            IF NOT found_stack
    		THEN
                IF line LIKE '%handle%number%name%' THEN found_stack := TRUE; END IF;
            ELSE
                cnt := cnt + 1;
                -- cnt = 1 is ME
                -- cnt = 2 is MY Caller
                -- cnt = 3 is Their Caller
                IF cnt = 3
    			THEN
                    lineno := TO_NUMBER(SUBSTR(line, 10, 10));
                    line   := SUBSTR(line, 22 );
                    IF line LIKE 'pr%' 				THEN n := LENGTH('procedure ');
                    ELSIF line LIKE 'fun%' 			THEN n := LENGTH('function ');
                    ELSIF line LIKE 'package body%'	THEN n := LENGTH('package body ');
                    ELSIF line LIKE 'pack%' 		THEN n := LENGTH('package ');
                    ELSIF line LIKE 'anonymous%'	THEN n := LENGTH('anonymous block ');
                    ELSE	n := NULL;
                    END IF;
     
                    IF n IS NOT NULL
    				THEN
                       caller_t := TRIM(UPPER(SUBSTR(line, 1, n-1 )));
                    ELSE
                       caller_t := 'TRIGGER';
                    END IF;
                    line := SUBSTR(line, NVL(n,1) );
                    n := INSTR(line, '.' );
                    owner := TRIM(SUBSTR(line, 1, n-1));
                    v_name := TRIM(SUBSTR(line, n+1));
                END IF;
            END IF;
        END LOOP;
    END;
    /

  3. #3
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 18
    Par défaut
    J'ai une erreur de conversion de numérique en chaine à l'execution mais je creuserai ça lundi
    Merci beaucoup !

  4. #4
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par McM Voir le message
    J'avais trouvé ça à un moment (mais je ne sais plus où)
    Sur le developpez.net, peut-être ? http://www.developpez.net/forums/d90...nd/#post599323

    Sinon, depuis la 10g au moins, il y a owa_util.who_called_me.

  5. #5
    Expert confirmé 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
    Par défaut
    Citation Envoyé par plaineR Voir le message
    Sur le developpez.net, peut-être ? http://www.developpez.net/forums/d90...nd/#post599323

    Sinon, depuis la 10g au moins, il y a owa_util.who_called_me.
    who_am_I et who_called_me c'est du AskTom.

  6. #6
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par mnitu Voir le message
    who_am_I et who_called_me c'est du AskTom.
    Je n'ai pas dit le contraire (et je n'ai surtout pas la prétention de les avoir écrite moi-même), j'ai juste supposé comme McM est un membre assidu de developpez.net, qu'il l'avait certainement vu sur ce site

    Quoique Tom l'a peut-être repris sur developpez.net vu que son billet est plus récent...

  7. #7
    Expert confirmé 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
    Par défaut
    Citation Envoyé par plaineR Voir le message
    Je n'ai pas dit le contraire (et je n'ai surtout pas la prétention de les avoir écrite moi-même), j'ai juste supposé comme McM est un membre assidu de developpez.net, qu'il l'avait certainement vu sur ce site
    ...
    Pas d'accusation de plagiat c'était juste une précision.

    ...
    Quoique Tom l'a peut-être repris sur developpez.net vu que son billet est plus récent...

    C'est une reprise du http://asktom.oracle.com/tkyte/ qui date dépuis 2000 ou 2001 il me semble.
    All of the content that used to be located at http://asktom.oracle.com/tkyte/ is now here:

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

Discussions similaires

  1. [XL-2007] Resume Next rappelle la procédure appelante
    Par hergios dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/08/2012, 15h59
  2. [ASE] [15.0.1] Quelle est la procédure appelante ?
    Par dbafranck dans le forum Sybase
    Réponses: 4
    Dernier message: 15/12/2006, 15h23
  3. comment connaitre le nom de la procédure appelante
    Par korntex5 dans le forum Delphi
    Réponses: 5
    Dernier message: 23/06/2006, 14h59
  4. Récupération des paramètres en sortie d'1 procédure stockée
    Par navis84 dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/12/2004, 11h40

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