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 :

problème curseur pl/sql


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Par défaut problème curseur pl/sql
    Bonjour,

    Je sollicite votre aide pour savoir comment construire un curseur composé d'une requête dynamique et pour laquelle on ne connait pas d'avance la structure d'accueil du résultat ?
    Dans l'idéal, je voudrais pouvoir écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DECLARE
      sql_dynamique  LONG;
    
      TYPE Curtype IS REF CURSOR;
      C1   Curtype;
      record  C1%ROWTYPE;
    BEGIN
      SELECT texte_sql INTO sql_dynamique;
      OPEN C1 FOR sql_dynamique
      FETCH C1 INTO record
    ....
    
    END;
    OU BIEN

    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
    DECLARE
      sql_dynamique  LONG;
    
    BEGIN
      SELECT texte_sql INTO sql_dynamique;
    
      DECLARE 
         CURSOR C1 FOR sql_dynamique;
         record  C1%ROWTYPE;
      BEGIN
      FOR ........
      END;
    
    END;
    Ce dernier code produit une erreur à la compilation concernant la construction CURSOR.

  2. #2
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Par défaut
    N'ai-je pas été clair dans mes explications ou la réponse est trop évidente ?

  3. #3
    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
    Il y en a trop d’erreurs et j’ai du mal à me décider avec quoi commencer.

    Je pense que mon meilleur conseil pour l’instant est de vous recommander la lecture des tutoriels PL/SQL et SQL Dynamique disponible sur ce site.

  4. #4
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Par défaut
    Très bien je complète la 2nde version.
    Désolé pour les oublis.
    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
    create or replace  PROCEDURE RESULTATS(req  table.id%type) IS
    BEGIN
    DECLARE
      sql_dynamique  LONG;
    
    BEGIN
      SELECT texte_sql INTO sql_dynamique FROM table where id=req;
    
      DECLARE 
         CURSOR C1 IS sql_dynamique;
      BEGIN
         FOR i IN C1 LOOP
             ......
         END LOOP;
      END;
    
    END;
    END RESULTATS;
    Je précise que table contient un ensemble de requêtes sql dont
    la colonne texte_sql en est la spécification de la forme (select ... from ...).

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create or replace  PROCEDURE RESULTATS(req  table.id%type) IS
    BEGIN
    DECLARE  sql_dynamique  LONG;
    1) C'est déjà un DECLARE en trop!
    2) N'utilisez pas LONG mais plutôt varchar2(32768) ou CLOB à la limite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CURSOR C1 IS sql_dynamique;
    3) Ca ne peut pas marcher! Il y a une solution donc, je vous réinvite de lire les tutoriels.
    ...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 32
    Par défaut
    Simplifier votre code :

    1- Créer une variable pour la requête (VARCHAR2(32767));
    2- Créer une variable cureur (type REF CURSOR)
    3- Utiliser la variable curseur pour executer votre requête ( OPEN var_curseur FOR var_requete LOOP ...................END LOOP; CLOSE var_curseur;

  7. #7
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Par défaut
    Merci de vos réponses.
    En créant un ref cursor, comment construire la structure d'accueil du fetch into ... puisque je ne connais pas d'avance la structure résultat ?

  8. #8
    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
    method 4 dynamic sql in pl/sql

    Mais, vous devez aussi bien comprendre les implications.

  9. #9
    Expert confirmé
    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
    Par défaut
    Article très interressant

  10. #10
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Par défaut
    Article très intéressant en effet bien que compliqué à mettre en oeuvre pour moi dans un premier temps.
    Cependant, j'ai résolu mon problème en passant par une phase intermédiaire de création de table et d'analyse de la structure de cette même table.
    Reste à rendre cela un peu plus dynamique.
    Merci à ceux qui ont contribué à cette discussion.

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

Discussions similaires

  1. [2008R2] Problème curseur sql server 2008 r2
    Par kent69003 dans le forum Développement
    Réponses: 2
    Dernier message: 29/04/2015, 09h46
  2. Problème curseur pl/sql
    Par paskal++ dans le forum PL/SQL
    Réponses: 2
    Dernier message: 10/06/2008, 16h55
  3. Problème Curseur SQL SERVER
    Par Yanmeunier dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/12/2005, 19h19
  4. Problème Access to Sql Server
    Par vuldos dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/08/2004, 15h56
  5. Réponses: 3
    Dernier message: 18/11/2002, 16h36

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