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 :

Code source d'une procédure.


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 203
    Billets dans le blog
    1
    Par défaut Code source d'une procédure.
    Bonjour,

    Je voudrais savoir comment mettre une instruction SQL PLUS dans un block PL/SQL ?.

    Je m'explique:
    En mode SQL PLUS, pour afficher le code source d'une proc, j'utilise la syntaxe suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT OBJECT_NAME 
              FROM USER_OBJECTS 
              WHERE OBJECT_TYPE='PROCEDURE'
    Avec cette instruction, je pourrai afficher le code source d'une procédure; mais je veux utiliser ce code dans une procédure paramétrée que je donne comme paramètre un objet (soit une procédure ou fonction).

    J'ai essayé ceci, la compilation déroule bien, mais il y a des erreurs quand je lance la procédure:
    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
    CREATE OR REPLACE PROCEDURE AFF_CODE_SOURCE(NOM_OBJET IN VARCHAR2)
    IS
     
    TXTOBJET VARCHAR2(30);
    AUCUNE EXCEPTION;
     
    BEGIN
     
       SELECT TEXT INTO TXTOBJET FROM USER_SOURCE
       WHERE  NAME=NOM_OBJET;
     
    EXCEPTION
    WHEN AUCUNE THEN 
       DBMS_OUTPUT.PUT_LINE(' ERREUR ... AUCUNE FONCTION OU PROCÉDURE N''A ÉTÉ CRÉE ');
     
    END AFF_CODE_SOURCE;
     
    -- BLOCK PL/SQL
    BEGIN
    -- APPEL DE LA PROCÉDURE
       AFF_CODE_SOURCE('REVENU_DEPT');
    END;
    Merci d'avance.

  2. #2
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    mais il y a des erreurs quand je lance la procédure
    Ah oui ? Lesquelles ?
    Pas de message d'erreur, pas d'aide


    Nicolas.

  3. #3
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Code sql : 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
    CREATE OR REPLACE PROCEDURE AFF_CODE_SOURCE(NOM_OBJET IN VARCHAR2)
    IS
     
    TXTOBJET VARCHAR2(30);
    AUCUNE EXCEPTION;
     
    BEGIN
     
       SELECT TEXT INTO TXTOBJET FROM USER_SOURCE
       WHERE  NAME=NOM_OBJET;
     
    EXCEPTION
    WHEN AUCUNE THEN 
       DBMS_OUTPUT.PUT_LINE(' ERREUR ... AUCUNE FONCTION OU PROCÉDURE N''A ÉTÉ CRÉE ');
     
    END AFF_CODE_SOURCE;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TXTOBJET VARCHAR2(30);]
    trop petit !!

    et autant mettre tout de suite NO_DATA_FOUND !!

    de plus

    Quelle version Oracle tu as ?

    Il y a des erreurs en effet, mais tu devrais les donner ...

    si tu as une version > = 9I tu as dbms_metadata
    sinon avec user_source il y a aussi plein d'exemple

    http://asktom.oracle.com/pls/asktom/...D:454220160386

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 203
    Billets dans le blog
    1
    Par défaut
    Voici les erreurs durant le lancement de la procédure avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE NOMPROC('NOM PROCEDURE');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ERREUR à la ligne 1 :
    ORA-01422: exact fetch returns more than requested number of rows
    ORA-06512: at "user.AFF_CODE_SOURCE", line 9
    ORA-06512: at line 1
    En fait, j'utilise la version 10g d'Oracle.
    Merci d'avance.

  5. #5
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Puisque ta requete retourne plus d'une ligne, tu dois gerer un curseur.

    Nicolas.

  6. #6
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Bonjour,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       SELECT TEXT INTO TXTOBJET FROM USER_SOURCE
       WHERE  NAME= 'XXX'
       AND TYPE='PROCEDURE'

    ca eviterait deja les name egaux mais de type differents

    Sinon en 10G il y a DBMS_METADATA , deja disponible depuis 9I

  7. #7
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Citation Envoyé par fatsora Voir le message
    Bonjour,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       SELECT TEXT INTO TXTOBJET FROM USER_SOURCE
       WHERE  NAME= 'XXX'
       AND TYPE='PROCEDURE'

    ca eviterait deja les name egaux mais de type differents
    De plus USER_SOURCE contient une ligne par ligne de code pour la procedure/fonction/package retournee par la requete, d'ou la necessite du curseur.

    Citation Envoyé par fatsora Voir le message
    Sinon en 10G il y a DBMS_METADATA , deja disponible depuis 9I
    Je me trompe peut-etre, il me semble que le but ici n'est pas tant de retrouver le code source mais plutot de manipuler PL/SQL.

    Nicolas.

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

Discussions similaires

  1. récupérer le code source d'une procédure stockée
    Par mike00 dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 13/06/2007, 11h31
  2. [Reseau] Récupérer le code source d'une URL
    Par gogolpexe dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 29/06/2005, 14h06
  3. Réponses: 5
    Dernier message: 21/12/2004, 18h12
  4. Récupérer le code source d'une page web
    Par glRaZ dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/12/2004, 09h16
  5. [Juridique] Comment réutiliser le code source d'une classe ?
    Par mathieu dans le forum Général Java
    Réponses: 8
    Dernier message: 17/05/2004, 13h40

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