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 :

utilisation owa_util who_called_me


Sujet :

PL/SQL Oracle

  1. #1
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Points : 960
    Points
    960
    Par défaut utilisation owa_util who_called_me
    Bonjour,
    je cherchais comment récupérer le nom de la procédure dans laquelle je suis et je suis tombé sur http://www.developpez.net/forums/d90...rigger-depend/.

    Je suis en 10g et 11g.

    j'ai essayé d'utilisé owa_util.who_called_me mais cela ne me retourne rien.
    J'ai ensuite crée les 2 procédures comme dans la discussion en lien mais le résultat de l'affichage n'est pas bon.
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    PROMPT CREATE OR REPLACE PACKAGE BODY p_agent
    CREATE OR REPLACE procedure qui_suis_je is
        l_owner        varchar2(30);
        l_name      varchar2(30);
        l_lineno    number;
        l_type      varchar2(30);
     
    	begin
     
       dbms_output.put_line('je suis : ');
       qui_appelle_moi( l_owner, l_name, l_lineno, l_type );
       dbms_output.put_line('1 : '||l_owner);
       dbms_output.put_line('2 : '||l_name);
       dbms_output.put_line('3 : '||l_lineno);
       dbms_output.put_line('4 : '||l_type);
    end;
     
     
     
     
    CREATE OR REPLACE procedure qui_appelle_moi( owner      out varchar2,
        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 := ltrim(rtrim(upper(substr( line, 1, n-1 ))));
                    else
                       caller_t := 'TRIGGER';
                    end IF;
                    line := substr( line, nvl(n,1) );
                    n := instr( line, '.' );
                    owner := ltrim(rtrim(substr( line, 1, n-1 )));
                    name  := ltrim(rtrim(substr( line, n+1 )));
                end IF;
            end IF;
        end loop;
    end;
    Lorsque je lance qui_suis_je , j'ai comme affichage :
    je suis :
    1 :
    2 : nonymous block
    3 : 1
    4 : TRIGGER
    Ne comprenant pas la préocédure "qui_appelle_moi", pourriez-vous m'indiquer, s'il vous plait, quelle erreur j'ai pu faire en l'appelant ou si une autre procédure pourrait répondre à mon besoin.

    Cordialement
    La SNCF est mon ami
    blog PARIS-GRANVILLE
    Inscription au panel IPSOS (possibilité d'avoir des bons d'achats)

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    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
    SQL> create or replace procedure say_my_name as
      2      l_owner varchar2(30);
      3      l_name varchar2(30);
      4      l_lieno number;
      5      l_caller varchar2(30);
      6  begin
      7      owa_util.who_called_me(l_owner,l_name,l_lieno,l_caller);
      8      dbms_output.put_line('result is ' || l_owner ||' '|| l_name ||' '|| l_lieno||' '|| l_caller);
      9  end;
     10  /
     
    Procedure created.
     
    SQL> create or replace procedure p2 as
      2  begin
      3     say_my_name;
      4  end;
      5  /
     
    Procedure created.
     
    SQL> set serverout on
    SQL> exec p2;
    result is SKUATAMAD P2 3 PROCEDURE
     
    PL/SQL procedure successfully completed.
     
    SQL>

  3. #3
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Points : 960
    Points
    960
    Par défaut
    Merci,
    Dans mes tests j'avais dû effectuer une erreur.
    Cela marche en effet bien en 10g et 11g
    La SNCF est mon ami
    blog PARIS-GRANVILLE
    Inscription au panel IPSOS (possibilité d'avoir des bons d'achats)

  4. #4
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Points : 960
    Points
    960
    Par défaut
    Bonjour,
    Dans le cas de l'utilisation de package, est-il possible de connaitre le nom de la procédure ou de la fonction, s'il vous plait?
    owa_util.who_called_me renvoit le nom du package.
    Cordialement
    La SNCF est mon ami
    blog PARIS-GRANVILLE
    Inscription au panel IPSOS (possibilité d'avoir des bons d'achats)

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/07/2009, 17h25
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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