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

SQL Oracle Discussion :

curseur dynamic avec un FOR


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 137
    Par défaut curseur dynamic avec un FOR
    Bonjour,

    Je cherche un exemple de curseur dynamic avec un FOR.

    Les seuls exemple que j'ai vu sont avec un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    open test_cur for 'select * from clients'
    LOOP
        Fetch test_cur IN test_rec
        EXIT WHEN ....
     
    END LOOP
    Close test_cur;
    Je voudrais éviter de devoir gerer le open close fetch en utilisant ce curseur dans un FOR.

    Est-ce que ca se fait et avez vous un exemple svp?
    merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Par défaut
    Voilà ce que çà donne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FOR test_rec IN select * from clients
    LOOP
      .....
    END LOOP;
    sauf si tu sous entendais que la chaîne "select * from clients" est obtenue dynamiquement... auquel ca c'est beaucoup plus compliqué

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 137
    Par défaut
    En fait c'est plus comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    v_clients := clients
    FOR test_rec IN 'select * from '||v_clients
    LOOP
      .....
    END LOOP;
    et il me donne une erreur : PLS-00103: Encountered the symbol "LOOP" when expecting one of the following:

    . ( * @ % & - + / at mod remainder rem .. <an exponent (**)>
    ||

    est-ce que ce serait supposé marché comme ca?
    merci

  4. #4
    Membre expérimenté
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Par défaut
    Je ne sais pas si ta requête fonctionne mais il manque un espace a la fin de la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    v_clients := clients
    FOR test_rec IN 'select * from '||v_clients||'  '
    LOOP
      .....
    END LOOP;

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par MAMMAR
    Je ne sais pas si ta requête fonctionne mais il manque un espace a la fin de la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    v_clients := clients
    FOR test_rec IN 'select * from '||v_clients||'  '
    LOOP
      .....
    END LOOP;
    ?!? Un espace à la fin de la table ?
    execute immediate 'select * from dual' marche très bien sans espace à la fin.
    L'erreur vient que ce n'est pas possible. Le IN attend un curseur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    BEGIN
    	FOR i IN 'select * from DUAL'
    	LOOP
    		NULL;
    	END LOOP;
    END;	
    ORA-06550: line 2, COLUMN 11:
    PLS-00999: implementation restriction (may be TEMPORARY) 
    ORA-06550: line 2, COLUMN 2:
    PL/SQL: STATEMENT ignored

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    L'autre façon de faire est de faire un execute immediate bulk collect dans une collection et ensuite de boucler sur cette collection.

  7. #7
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par McM
    L'autre façon de faire est de faire un execute immediate bulk collect dans une collection et ensuite de boucler sur cette collection.
    Certes, mais la solution des open, fetch et close, me semble plus propre et sans doute plus performante si le volume est important.

  8. #8
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    exact. En plus le gain du FOR par rapport au FETCH s'en retrouve limité puisqu'il faut tester la collection nulle.

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 137
    Par défaut
    donc si je comprends bien... il faudrait que j'utilise le open fetch close... ok, c'est ce que j'utilise habituellement.

    je m'entêtais à vouloir un For parce que certain de mes collegue me dise que c'est mieux un for qu'un open fetch close pour un curseur. Plus clean et plus performant puisque moins d'instructions... qu'en pensez-vous?

  10. #10
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    C'est aussi mon opinion.
    Sauf que dans le cas du dynamique... on peut pas. Mais en même temps, le dynamique, c'est pas optimisé.

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 137
    Par défaut
    merci beaucoup

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

Discussions similaires

  1. [vb6]=Probleme avec open for append
    Par prison_break dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/01/2007, 13h40
  2. [ActionScript] Problème avec boucle 'FOR'
    Par BnA dans le forum Flash
    Réponses: 7
    Dernier message: 02/11/2006, 09h26
  3. Lister les dossiers avec un for
    Par AnkyFive dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 25/09/2006, 10h14
  4. [SQL Server] parcourir une Table avec un FOR
    Par papouAlain dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2006, 11h49
  5. faire plusieur declaration avec boucle for ?
    Par debutant-1 dans le forum C
    Réponses: 4
    Dernier message: 18/05/2006, 20h19

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