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] Curseur dynamique


Sujet :

Oracle

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut [PL/SQL] Curseur dynamique
    Bonjour,

    je ne parviens pas à créer un curseur dynamique...
    Ma fonction crée une requête qui interroge une table dont le nom et la liste des champs lui sont passés en paramètre. Selon la table, la requête doit récupérer plus ou moins de champs. Le nombre de champs variant je ne sais pas comment écrire le FETCH...INTO... du curseur.
    Pouvez m'aider ?

    Merci et bonne journée.

    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
    23
    24
    25
    26
     
     
    FUNCTION function1
    (
        table_name IN VARCHAR2,
        liste_champs IN VARCHAR2
    )
    AS
        vRequete LONG;
        TYPE c_cursor IS REF CURSOR; -- Création d'un type CURSOR
        cCurseur1 c_cursor;
    BEGIN
     
    vRequete := 'SELECT ' || liste_champs || '
    	       FROM  ' || table_name || '
    ';
     
       OPEN cCurseur1 FOR vRequete;
       LOOP
           FETCH cCurseur1 INTO ??? JE NE SAIS PAS QUOI FAIRE ICI ???
           ...
           ...
           ...
       END LOOP;
       CLOSE cCurseur1;
    END

  2. #2
    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
    Lisez cet article : http://sheikyerbouti.developpez.com/dynamic/dynamic.htm

    Il contient du matériel téléchargeable, notament le package PKG_DYNAMIC qui contient tout ce qu'il faut pour ce genre de SQL dynamique.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 57
    Points : 68
    Points
    68
    Par défaut
    Bonjour à tous
    Au depart j'ai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Cursor c1 (IdDate In Number) Is
        Select TREATID,TREATSTATUS,INDPAIEMENT,INDCESSION 
             From T_TABLE
        Where DATEID = IdDate;
     
    vC1 c1%ROWTYPE;
    Mon problème est le suivant:
    je souhaite transformer ce curseurr en curseur dynamique avec la table qui varie aussi
    Sur les lectures diverses sur developpez.com, voici ce que je souhaite faire:

    1/
    je crée une fonction qui construit une requête à partir des paramètre en entrée: date et nom de la table

    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
     
    Function Fct_RequeteCurDealstatus (pIdDate In Number, 
                                                     pTable In Varchar2) 
             Return Varchar2
    IS
     
    requestCurDealstatus Varchar2(1000) ;
     
    BEGIN
     
    requestCurDealstatus:= 
             'Select TREATID,TREATSTATUS,INDPAIEMENT,INDCESSION 
                        From pTable
            ||' Where DATEID = pIdDate';
     
    return requestCurDealstatus;
     
    END;

    2/

    Ensuite est-ce que je peux faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DECLARE
      CURSOR c1 IS
        Fct_RequeteCurDealstatus (200910, T_MATABLE);
     
    -- declare record variable that represents a row fetched  
       c1_rec c1%ROWTYPE;

Discussions similaires

  1. [SQL Server 2000] Curseur dynamique
    Par Kloun dans le forum Développement
    Réponses: 4
    Dernier message: 20/02/2009, 09h09
  2. Création Curseur à partir d'un sql statement dynamique
    Par droog dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 20/05/2008, 15h04
  3. Réponses: 3
    Dernier message: 30/10/2007, 08h20
  4. [PL/SQL] Curseur avec Paramètre
    Par blids dans le forum Oracle
    Réponses: 5
    Dernier message: 10/10/2004, 20h07
  5. Enregistrement issu d'un curseur dynamique
    Par vanessaf22 dans le forum SQL
    Réponses: 26
    Dernier message: 15/04/2004, 13h26

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