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 :

nom de table passé en parametre


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut nom de table passé en parametre
    Bonjour,

    je souhaiterais lancer une requete dynamique sur toutes les tables d'un schéma.

    Avec un premier curseur je ramene le nom de toutes les tables du schéma,
    puis je construis ma requete avec une variable que j'éxécute via :

    LC$Requete:= 'SELECT distinct(dt_deb_tran),count(*) from '|| NOMTABLE || 'group by dt_deb_tran' ;

    EXECUTE IMMEDIATE LC$Requete INTO date_retourne ;

    Le probléme est que cette requete me ramène plusieurs lignes, je ne peux donc pas utiliser cet ordre.

    J'ai bien essayé de passer par un second curseur, imbriqué dans le premier, mais on a pas la possibilité de créer un curseur avec le nom de la table en variable dans la clause from ( comme dans le premier exemple donné plus haut ).

    J'ai bien fouillé tout le forum avant de poser cette question, mais la je suis vraiment bloqué.


    Merci pour votre aide.

  2. #2
    thg
    thg est déconnecté
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 46
    Points : 55
    Points
    55
    Par défaut
    Tu peux d'inspirer de ceci ... J'ai testé en 10g mais pas en 9i ...

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    CREATE OR REPLACE PROCEDURE TEST_CUR IS
     
    Type myCur IS REF CURSOR;
    cur myCur;
     
    rec EMP%ROWTYPE;
    stmt VARCHAR2(32767);
    matable varchar2(30);
     
     
     
    BEGIN
     
    matable := 'EMP';
     
    stmt := 'select * from ' || matable;
     
    OPEN cur FOR stmt;
     
    LOOP
      FETCH cur INTO rec;
      EXIT WHEN cur%NOTFOUND;
     
      DBMS_OUTPUT.PUT_LINE('Ename = ' || rec.ename);
    END LOOP;
     
    CLOSE cur;
     
    END ;
     
    /
     
    show error;
    [quote][/quote]

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    OK, merci, cela répond presque totalement a mon besoin. Mon seul problème
    est que l'on ne peut pas paramétrer le %ROWTYPE.

    En fait au lieu de rec EMP%ROWTYPE; j'aurais bien souhaité avoir une ligne du style rec NOMTABLE%ROWTYPE;

    Mais merci beaucoup pour ta réponse , il me semble être sur la bonne voie.

  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 : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    non, c'est impossible.

  5. #5
    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
    Au lieu de créer une variable de type "matable%rowtype;" rien ne t'empêche de créer un record de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type result_rec is record (dt_deb_tran date,
                               nb number);
    type cur_rec is ref cursor return result_rec;
    cur cur_rec;
    rec result_rec;
    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.

  6. #6
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    ok merci, j'ai pu résoudre mon problème.

    A bientot

Discussions similaires

  1. passer un nom de table en parametre
    Par fred19732 dans le forum Développement
    Réponses: 2
    Dernier message: 14/01/2011, 23h32
  2. Réponses: 9
    Dernier message: 11/01/2010, 10h30
  3. nom de table en parametre
    Par falifalibe2 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 02/11/2009, 13h13
  4. nom de table en parametre
    Par Nicopilami dans le forum Développement
    Réponses: 2
    Dernier message: 24/09/2009, 10h19
  5. [POO] Désactiver un objet dont le nom est passé en parametre
    Par JavaEli dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/07/2005, 08h47

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