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 où le schéma de la table SELECTionnée est paramétrable


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 3
    Points : 3
    Points
    3
    Par défaut [PL/SQL] Curseur où le schéma de la table SELECTionnée est paramétrable
    Bonjour,

    Je désirerais faire une boucle sur un curseur, mais où le schéma est paramétrable, du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DECLARE
        utilisateur     varchar2(100);
    BEGIN
        for c in (SELECT * from utilisateur.table1) loop
            null;
        end loop
    END;
    
    Bien évidemment ca ne marche pas, alors j'ai pensé à faire une boucle du genre fetch :

    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
        v varchar2(100);
        type curseur is ref cursor;
        c curseur;
    BEGIN
        open c for 'SELECT champ1 FROM ' || utilisateur ||'.table1;
            fetch c into v;
            exit when c%notfound;
            loop
                null;
            end loop;
        close c;
    END;
    Mais là le problème c'est que je ne peux pas faire un 'SELECT *', mais SELECTionner un seul champ à la fois...

    Apparemment le curseur paramétré avec un schéma en paramètre ne fonctionne pas non plus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DECLARE
        table_id      varchar2(4000);
        cursor c(owner varchar2) is select * from owner.table1;
    BEGIN
        for i in c('utilisateur1') loop
          null;
        end loop;
    END;
    (cela donne l'erreur: "Table ou vue inexistante");

    Auriez-vous des idées ?

    Merci d'avance !

    EDIT : Je travaille avec Oracle 10g, Windows XP

  2. #2
    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
    Points : 3 609
    Points
    3 609
    Par défaut
    La 2è solution fonctionne sans problème. Ok, tu ne peux pas faire select *, mais tu peux mettre autant de colonnes que tu souhaites :
    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
        v1 varchar2(100);
        v2 varchar2(100);
        ...
        vn varchar2(100);
        type curseur is ref cursor;
        c curseur;
    BEGIN
        open c for 'SELECT champ1, champ2, ..., champn FROM ' || utilisateur ||'.table1;
            loop
               fetch c into v1, v2, ..., vn;
            exit when c%notfound;
            end loop;
        close c;
    END;
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup PlaineR,

    ca marche impeccable.

    J'avais en effet essayé de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          fetch c.colonne1 into v1;
          fetch c.colonne2 into v2;
    mais c'est impossible.

    Merci encore

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

Discussions similaires

  1. [PL/SQL][CURSEUR]invalid ROWID!!!
    Par thief dans le forum Oracle
    Réponses: 9
    Dernier message: 08/08/2005, 16h26
  2. Transact SQL - Curseurs
    Par fanch17 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/03/2005, 17h31
  3. T-SQL curseurs
    Par fanch17 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/03/2005, 13h51
  4. [PL/SQL) Curseur et nom de champ explicite
    Par Loko dans le forum Oracle
    Réponses: 6
    Dernier message: 01/12/2004, 15h07
  5. [PL/SQL] Curseur avec Paramètre
    Par blids dans le forum Oracle
    Réponses: 5
    Dernier message: 10/10/2004, 20h07

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