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

Oracle Discussion :

[pl/sql] execute immediate


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut [pl/sql] execute immediate
    Bonjour à tous et à toutes,

    J'ai un autre petit problème, cette fois, tout marcher bien, sauf lorsque je veux faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute immediate requete;
    où requete est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    requete : select * from dict_gacvl g, GACVL_ACTION@RMPRODTT t where g.table_name
    = 'GACVL_ACTION' and t.ACTION_CD = g.column_1 and (t.ACTION_DSC_E <> g.column_2 
    or t.ACTION_DSC_F <> g.column_3);
    si je fais rouler requete directement dans TOAD, elle fonctionne nickel, mais lorsque je fait le execute immediate......ça marche pas.....

    je me demandais s'il y avait un statement à faire avant de le faire rouler? Un peu comme DBMS_OUTPUT.PUT_LINE

    Merci à l'avance
    Nadine

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 079
    Points
    8 079
    Par défaut
    EXECUTE IMMEDIATE, c'est du PL/SQL.
    Ca doit donc figurer entre un BEGIN et un END.

    Est-ce bien le cas ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 68
    Points : 71
    Points
    71
    Par défaut
    @requete , cela devrait marcher.

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Citation Envoyé par mollux
    @requete , cela devrait marcher.

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    SheikYerbouti pourquoi tu ris?
    et pour le begin et end, il est déjà dans un begin end.....

    Bon je sais pas si c'est le problème, mais il y a aussi un loop dans le même begin....est-ce qu'il faudrait que j'en ajoute un seulement pour le execute immediate?

    En plus, j'ai trouvé sur un site que le execute immediate ne peut faire des 'multiple row queries' est-ce que c'est le cas pour moi, je ne comprends pas trop ce que ça veut dire.....

    Je n'ai qu'un select que je fais rouler à la fois....

    ah et pour le @requete, ça me crée une erreur pl/sql....


    merci pour l'aide en passant
    Nadine

  6. #6
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Dans ce cas tu dois avoir recu un droit sur une table via un role... Il faut recevoir ce droit directement.


    Laly.

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    wow!!!! Là tu viens de me perdre!!!!!

    Je n'ai rien compris......je dois t'avouer que je suis un peu débutante dans le domaine de pl/sql....

    est-ce que tu connais une faq là-dessus...ou sinon est-ce que tu pourrais m'expliquer un peu plus svp

    merci à l'avance
    Nadine

  8. #8
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Nadine combien de fois faudra t-il le répeter :

    ça ne marche pas
    n'aidera JAMAIS personne

    le message d'erreur permettra de perdre beaucoup moins de temps.

    lorsque vous générez une requête dans une chaine, pensez toujours à l'imprimer (DBMS_OUTPUT) avant de l'exécuter.
    Vous comprendrez également beaucoup plus vite pourquoi "çc na marche pas"

  9. #9
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 338
    Points
    338
    Par défaut
    Requête est une variable texte (CHAR ou VARCHAR ou VARCHAR2) dans un bloc PL/SQL, non? Alors ou sont les apostrophes?

    [EDIT]
    Et avec ça marche pas, si vous avez un message d'erreur, quel est-il?

    A essayer: Avant l'execute immediate, un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    raise_application_error(-20100,requete);
    pour voir le contenu de la requête

    Néamoins, requete est une variable, juste? Quel type? Texte? APOSTROPHES?

  10. #10
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    oui je fais un dms_output avant de faire exécuter et si je fais un copié collé dans sql*plus, la requête me retourne le bon résultat.....

    Je commence à me demander si le execute immediate retourne rien.....et que mon erreur serait plus loin....

    En effet je fais un spool dans un fichier log et j'afficher mes select avant de les faire exécuter, donc ça m'afficher le premier select et ça sort en me disant le message suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PL/SQL procedure successfully completed.
    alors qu'il y a environ une centaine de select à faire......

    est-ce que c'est possible ?

  11. #11
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Nadine,


    Tu peux faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from ROLE_TAB_PRIVS where role in (select role from session_roles)
    Sous SQL*Plus quand ta requête marche ?

    Laly.

  12. #12
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    wow vous êtes vraiment gentil(le)s de me répondre aussi rapidement!!!

    Bon pour lalystar, la requête que tu m'as donné me sélectionne aucune ligne, je sais pas si ça t'aide...

    ensuite pour le raise_application_error, il ne m'affiche rien, est-ce que c'est normal, pourtant quand je fais DBMS_OUTPUT.PUT_LINE (requete);

    Ça m'affiche le contenu de requete qui est le bon select....

    ah j'ai fait un test, j'ai enlevé execute immediate (mis en commentaire) et j'affiche pas mal toutes mes requêtes.....

  13. #13
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    là je ne suis pas fière de moi!!!!!

    J'avais mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    EXCEPTION
    WHEN OTHERS THEN
    ROLLBACK;
    à la fin de ma procédure!!!!!!!!!!!!!!!!

    Lorsque je l'ai enlevé, j'ai vu que c'était mon dms_output.put_line qui créait le problème, parce que j'essayais d'afficher une ligne de plus de 255 bytes!!! Maintenant ma procédure afficher toutes mes tables que je devais afficher, mais le execute immediate n'afficher toujours pas les résultats de ma requete....est-ce normal, si oui est-ce qu'il y a un moyen d'afficher les résultats??

    Merci à l'avance de votre aide
    Nadine

  14. #14
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    t'as bien fait un :


  15. #15
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    oui et il fonctionne, parce que mes dms_output.putline affiche bien...

  16. #16
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Ben cela ma parait normal.
    la requête dans le execute immediate fait juste un select, donc ouvre un curseur. Il n'y a pas d'affichage particulier !

    la question est plutôt que faire de ce curseur ?

  17. #17
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    ok, merci je comprends beaucoup mieux ce que fait le execute immediate, je vais pouvoir l'utiliser mieux!

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

Discussions similaires

  1. [Oracle 9iR2][PL/SQL] EXECUTE IMMEDIATE USING
    Par mainecoon dans le forum Oracle
    Réponses: 4
    Dernier message: 08/02/2007, 19h08
  2. [8i][PL/SQL] EXECUTE IMMEDIATE
    Par Bahan dans le forum SQL
    Réponses: 25
    Dernier message: 15/09/2006, 14h05
  3. SQl loader et execute immediate
    Par salim_kwada dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 31/08/2006, 13h30
  4. [PL/SQL] EXECUTE IMMEDIATE et INSERT et RETURNING
    Par swirtel dans le forum Oracle
    Réponses: 2
    Dernier message: 18/04/2006, 09h25
  5. [PL/SQL] Execute immediate
    Par BiM dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/08/2005, 11h13

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