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 :

Liste des arguments d'un procédure ou fonction


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut Liste des arguments d'un procédure ou fonction
    Bonsoir,

    J'aimerais savoir si il est possible d'obtenir une liste des arguments d'une procédure ou d'une fonction (d'un package ou non), un peu a la manière de l'objet "arguments" en JavaScript (pour exemple, uniquement).

    J'ai bien vu des tas de chose intéressantes, telles que la table ALL_ARGUMENTS qui me donne tout un tas de détails utiles, mais il me manque le principal ... les valeurs des arguments au moment ou la fonction (ou procédure) est exécutée.

    Merci d'avance,
    @+

  2. #2
    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
    Les valeurs des arguments sont connues par la procédure elle même et je pense qu’elles sont disponibles également dans une trace SQL étendue.

  3. #3
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Je me suis déjà confronté à cette problématique

    http://dioncho.wordpress.com/2009/05...he-bind-value/

  4. #4
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Merci a vous pour vos réponses.
    J'ai en effet bien vu vos messages ce matin, et j'avais recommencé a travailler la dessus, mais j'ai du dériver sur autre chose; cela m'a finalement pris toute la journée.
    Je vous tiendrais au courant de ce que j'ai pu / su faire ou pas, dès que possible.

    Merci encore,
    @+

  5. #5
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Voici ou j'en suis... j'ai bien envie de me laisser penser que j'ai une solution fiable qui réponds a ma situation (bien que j'aurais rêvé mieux); mais malgré tout j'ai peur de passer a côté d'une chose importante, étant donné que je fais appel a des vues de SYS, et que je ne prétends pas être un expert.
    Pour résumer donc, j'espère faire récupérer le SQL qui est en cours d’exécution par la fonction qui l'a elle même lancé. Ainsi, je n'aurais plus qu'a "nettoyer" la chaîne obtenue, et faire un "dbms_utility.comma_to_table" sur la partie de la chaîne qui restera (et qui correspondra alors aux valeurs passées en arguments).
    Voici donc le test (fonction dans un package):
    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
     
         FUNCTION start_test ( p1 IN VARCHAR2, p2 IN VARCHAR2, p3 IN VARCHAR2 )
              RETURN INTEGER
         AS
              current_sql   CLOB;
         BEGIN
              current_sql   := EMPTY_CLOB ( );
              /*
              ... avant toute chose, tentons de récupérer ce le SQL ...
              */
              SELECT d.sql_fulltext
                INTO current_sql
                FROM (SELECT address, hash_value
                        FROM v$open_cursor
                       WHERE user_name = USER AND sid = SYS_CONTEXT ( 'USERENV', 'SID' )) a
                   ,  (SELECT to_name, from_address
                         FROM v$object_dependency
                        WHERE to_owner = USER) b
                   ,  (SELECT address, hash_value, sql_fulltext
                         FROM v$sql
                        WHERE users_executing > 0
                          AND parsing_schema_name = USER
                          AND TRUNC ( last_active_time, 'MI' ) = TRUNC ( SYSDATE, 'MI' ) -- <-tentative peut être naive de réduire le nombre d'enregistrements remontés par l'appel a cette vue
                          ) d
                   ,  (SELECT object, TYPE
                         FROM v$access
                        WHERE owner = USER AND TYPE = 'PACKAGE' AND sid = SYS_CONTEXT ( 'USERENV', 'SID' )) e
               WHERE a.address = d.address
                 AND a.hash_value = d.hash_value
                 AND a.address = b.from_address
                 AND b.to_name = e.object;
     
              DBMS_OUTPUT.put_line ( current_sql );
     
              /*
              ...maintenant on fait pleins de trucs intéressants ici ...
              */
              RETURN 1;
         END start_test;
    Si tout ce qui suit le "SELECT" est correct, j'appliquerais alors de manière étendue cette méthode dans une fonction de chacun de mes petits packages, et continuerais ma petite histoire ...

    Croyez vous que je me fourre le doigt dans l'oeil et qu'il y a un risque pour que - dans un scénario que je n'ai pas anticipé - je récupère "sql_fulltext" qui ne soit pas le bon ?

    Merci d'avance,

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    A tout hasard, on peut connaitre la finalité de ta demande ?

    Quel est l'objectif fonctionnel ?

  7. #7
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour Bluedeep,

    Disons que tout ceci est purement "expérimental" pour moi, test uniquement.
    Imaginons que cette fonction soit en fait créée dynamiquement, basée sur des infos qui tomberaient dans une table (peu importe).
    J'aimerais pouvoir insérer dans le code de celle ci, et d'éventuelles autres créées de la même manière, un process qui me permette de récupérer les arguments qui leur sont passés.
    Je n'ai pas su tirer parti des pistes données par les deux précédant intervenants, et suis finalement tombé sur ces vues, comme "v$open_cursor".

    Bien que les infos remontées via v$open_cursor et autres dans le test que je fais me semblent toujours bonnes, ma crainte est de passer a côté de quelque chose - faute a mon manque de connaissances - qui fausserait tout au final.
    Et peut être y a t il plus simple, plus direct pour faire ce que je cherche ...

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/10/2014, 14h29
  2. Réponses: 4
    Dernier message: 05/07/2012, 18h13
  3. déclaration des variables dans une procédure ou fonction
    Par guefrachi dans le forum Débuter
    Réponses: 6
    Dernier message: 23/07/2010, 13h27
  4. [Débutant] Utiliser des listes en argument d'une fonction
    Par erkenbrand dans le forum Windows Forms
    Réponses: 10
    Dernier message: 29/05/2008, 12h56
  5. Réponses: 1
    Dernier message: 10/05/2008, 23h36

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