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 :

Récupérer les tables, champs et valeurs avec un owner


Sujet :

Oracle

  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut Récupérer les tables, champs et valeurs avec un owner
    Bonjour,

    Je souhaite récupérer des données d'une base oracle 6 via du pl/sql.

    A partir du dba_all_tables, je souhaite récuperer les tables champs et contenus de ces chanmps grâce au owner.

    Voici le code :

    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
    SET head off
    SET feed off
    set serveroutput on
    spool liste_tables.sql
    declare
    champs varchar2(50);
    cursor C1 IS SELECT table_name FROM dba_all_tables where owner = 'xxx';
    cursor C2 (cols varchar2) is select cname from col where tname = cols ;
    begin
    for i in C1
    loop
    open C2 (i.table_name);
    loop
    fetch C2 into champs;
    DBMS_OUTPUT.PUT_LINE(champs);
    end loop;
    close C2;
    end loop;
    end;
    /
    spool off
    bon ce script part en sucette puisque il fait planter la machine mais qu'est ce que je ne fais pas bien ?

    Merci à tous !
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  2. #2
    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
    c'est pas plus simple de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT cname FROM col, dba_all_tables dat WHERE tname = table_name 
    and dat.owner  = 'XXX';

  3. #3
    Membre confirmé Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Points : 603
    Points
    603
    Par défaut
    Pour récupérer les tables, les colonnes et les valeurs à partir de l'owner dans un pl/sql, tu va être obligé d'utiliser du sql dynamique.
    Et avant Oracle 8i, sur que c'est Oracle 6 (?), il faut utiliser la procédure DBMS_SQL : http://download-west.oracle.com/docs...sql.htm#998120

    Nicolas.

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    merci pour les réponses

    en fait si je mets ce code :

    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
    SET head off
    SET feed off
    set serveroutput on
    spool liste_tables.sql
    declare
    champs varchar2(50);
    cursor C1 IS SELECT table_name FROM dba_all_tables where owner = 'LFLD';
    cursor C2 (champs2 col.tname%Type) is select cname from col where tname = champs2;
    begin
    for i in C1
    loop
    for j in C2 (i.table_name)
    loop
    --fetch C2 into champs;
    DBMS_OUTPUT.PUT_LINE('select ' || j.cname || ' from ' || i.table_name);
    end loop;
    --close C2;
    end loop;
    end;
    /
    spool off
    ça me renvoie :

    select champs1 from table1
    select champs2 from table1
    select champs1 from table2
    select champs2 from table2
    select champs1 from table3
    etc ...
    ce qui aurait été plus judicieux, c'est :

    select champs1, champs2 from table1
    select champs1, champs2 from table2
    select champs1 from table3
    etc...
    ce qui me donnerait ensuite comme résultat dans un fichier txt :

    table1
    champs1,champs2,
    table2
    champs1,champs2
    table3
    champs1
    je sais pas si j'ai été clair...
    merci
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  5. #5
    Membre confirmé Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Points : 603
    Points
    603
    Par défaut
    Ok, voilà ce que j'essaierais :
    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
    SQL> declare
      2    stmt varchar2(32767);
      3  begin
      4      for x in (select table_name, owner from all_tables where owner = 'SCOTT') loop
      5          for y in (select column_name from all_tab_columns where table_name = x.table_name and owner = x.owner) loop
      6              stmt:=stmt||','||y.column_name;
      7          end loop;
      8          stmt:= 'select '||ltrim(stmt,',')||' from '||x.table_name||';';
      9          dbms_output.put_line(stmt);
     10          stmt:=null;
     11       end loop;
     12  end;
     13  /
    select COL1,COL2 from TAB3;
    select COL1,COL2 from TAB4;
    select COL from TITI;
    select EMPNO,ENAME from EMP3;
    select PROJECTID,INDENT,ITEM from TGINSTMANUALENG;
    [...]
    Nicolas.

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    yes c'est propre merci !

    maintenant je n'ai plus qu'à faire le résultat comme suit :

    champs;champ2;champs3...
    merci !!
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

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

Discussions similaires

  1. Récupérer les données d'un formulaire avec un nombre de champs similaires évolutifs
    Par jimmyneutron dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/03/2012, 23h14
  2. Réponses: 2
    Dernier message: 07/06/2006, 08h42
  3. Réponses: 2
    Dernier message: 07/03/2006, 15h27
  4. [C#][VS2005]Récupérer les info d'un certificat avec FX 2.0
    Par virgul dans le forum Windows Forms
    Réponses: 12
    Dernier message: 31/01/2006, 08h52
  5. Récupérer les identifiants de la DB avec SQL.
    Par Cygnus Saint dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/08/2005, 07h15

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