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 :

SQL dynamique


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 49
    Points : 25
    Points
    25
    Par défaut SQL dynamique
    Bonjour,
    je souhaiterais executer un ordre SQL dynamique, je connais le package DBMS_SQL, mais je voudrais utiliser EXECUTE IMMEDIATE qui est apparement plus rapide (lu sur votre site).
    Par contre je ne sais pas comment il fonctionne, tout ce que j'ai trouve c'est pour executer un alter ou un create, hors je souhaiterais executer un select et travailler sur chaque enregistrement.
    En gros je voudrais connaitre l'equivalent de cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    open cur;
    loop
      fetch cur into record;
      exit when cur%NOTFOUND;
      ....
    end loop;
    close CUR;
    Merci de votre aide, LoKi

  2. #2
    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
    voila l'article dont vous n'osiez même pas rêver

    http://sheikyerbouti.developpez.com/execute_immediate/

  3. #3
    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
    Vu ce que tu souhaites en faire, je pense qu'un REF CURSOR serait plus approprié.


    Regardes par exemple : http://www.developpez.net/forums/vie...ght=ref+cursor

    Pourquoi as tu besoin d'utiliser du SQL dynamique ?


    Laly.

  4. #4
    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
    qu'est ce qui te fait dire que REF CURSOR est mieux ?

  5. #5
    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
    qu'est ce qui te fait dire que REF CURSOR est mieux ?
    C'est juste qu'il veut faire du SQL dynamique pour faire des select sur a priori plusieurs lignes. Je ne sais pas si c'est possible de le faire avec un execute immediate, amha non.


    Laly.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    merci,
    j'ai finalement utilise un REF CURSOR comme indique par lalystar et ca marche nikel pour ce que je veux faire.
    Une fois vous avez ete nikel et rapide.
    Bonne journee, LoKi

  7. #7
    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
    Citation Envoyé par lalystar
    C'est juste qu'il veut faire du SQL dynamique pour faire des select sur a priori plusieurs lignes. Je ne sais pas si c'est possible de le faire avec un execute immediate, amha non.
    bien vu sherlock

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Citation Envoyé par orafrance
    Citation Envoyé par lalystar
    C'est juste qu'il veut faire du SQL dynamique pour faire des select sur a priori plusieurs lignes. Je ne sais pas si c'est possible de le faire avec un execute immediate, amha non.
    bien vu sherlock
    bonjour les amis,

    je ne connais pas les ref cursor mais je sent que je vais m'y mettre.
    Par contre, je confirme que c'est possible de faire des selects avec du sql dynamique. Et c'est encore une fois SheikhYerbouti qui nous donne la solution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://<a href="http://www.developpez.net/forums/viewtopic.php?p=1186397&highlight=#1186397" target="_blank">http://www.developpez.net/forums/vie...light=#1186397</a>
    Par contre le résultat n'est pas très concluant. j'ai vite abandonné...

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Les ref curdor sont vraiment pratiques.
    Ils s'utilisent de la meme facon que des cursors normaux, a la seule difference qu'ils acceptent comme select une chaine de caracteres.
    Par contre j'aurais une petite question:
    dans ma chaine de caractere j'aimerais bien lui passer des parametres (pour eviter de parse 55000fois la meme requete)
    Ma requete ressemble a cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    v_requete := 'SELECT ISTP_NOHANDLR,' ||
                             'ISTP_NOSUPPL,' ||
                             'ISTP_NOORDER,' ||
                             'ISTP_DTPLAN,' ||
                             'ISTP_DTACTUAL,' ||
                             'ISTP_DTTEST,' ||
                             'ISTP_CDAPPROV ' ||
                        'FROM T_R20_ISTPLAN ' ||
                       'WHERE ISTP_NOPART   = ''' || v_projets.PROJ_NOPART || '''' ||
                         'AND ISTP_CDNOPART = ''K'' ' ||
                         'AND ISTP_NOSUPPL  not in (' || v_suppl_order || ')';
    et si je met :v_projet etc ... j'ai une erreur ORA-600 et ORA-15212 ???
    LoKi

  10. #10
    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
    il faut ajouter des paramétres au curseur à ce moment là

    http://sheikyerbouti.developpez.com/..._immediate/#L5

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Terrible, j'avais oublier d'utiliser le using sur l'ouverture du cursor ca marche au poil 8)
    Merci les gens, LoKi

  12. #12
    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 aline
    je ne connais pas les ref cursor mais je sent que je vais m'y mettre.
    Par contre, je confirme que c'est possible de faire des selects avec du sql dynamique. Et c'est encore une fois SheikhYerbouti qui nous donne la solution.

    Par contre le résultat n'est pas très concluant. j'ai vite abandonné...
    Peut-on savoir ce qui n'est pas concluant ?
    le code Sql dynamique fourni dans l'exemple utilise lui aussi un REF CURSOR. où est le problème ?

  13. #13
    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
    Par contre, je confirme que c'est possible de faire des selects avec du sql dynamique. Et c'est encore une fois SheikhYerbouti qui nous donne la solution.
    Merci Aline et Sheik, je ne connaissais pas le INTO pour un execute immediate, mais c'est bien précisé dans l'article que ca ne fonctionne que pour les requêtes qui ne rammènent qu'une seule ligne.


    Laly.

  14. #14
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Citation Envoyé par SheikYerbouti

    Peut-on savoir ce qui n'est pas concluant ?
    le code Sql dynamique fourni dans l'exemple utilise lui aussi un REF CURSOR. où est le problème ?

    En fait, je n'arrivais plus à retrouver un résultat avec des données formatées. Peux etre est-ce du à mon manque de dexterité a manier pl/sql... J'en ai donc déduit que le sql dynamique, c'était très bien mais pas pour faire des selects qui ramènent plusieurs enregistrements.

    Et tout cela malgré l'ingéniosité de Sheikh à faire marcher mes requêtes

  15. #15
    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
    Fichtre ! je ne comprends toujours pas.

    Le Sql dynamique permet d'alimenter un curseur avec un Select dynamique.
    Mais ensuite, il ramène des colonnes comme n'importe quel ordre Select sous Sql*Plus, ou n'importe quel autre curseur.

    je ne vois pas le rapport avec le formattage des colonnes ramenées...

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

Discussions similaires

  1. Prob SQL dynamique
    Par anthony8 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/09/2004, 09h53
  2. Appel de function en SQL Dynamique
    Par dkd dans le forum Oracle
    Réponses: 22
    Dernier message: 28/09/2004, 18h01
  3. SQL dynamique : pb de syntaxe
    Par Pasiphae dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/08/2004, 16h50
  4. SQL dynamique
    Par Etienne1 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/08/2004, 10h18
  5. SQL Dynamique - Materialized view
    Par Simeans2004 dans le forum SQL
    Réponses: 15
    Dernier message: 10/06/2004, 17h56

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