Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/02/2007, 20h53   #1
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
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 :
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))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2007, 13h01   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
c'est pas plus simple de faire :

Code :
1
2
SELECT cname FROM col, dba_all_tables dat WHERE tname = table_name 
AND dat.owner  = 'XXX';
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2007, 14h29   #3
Membre expérimenté

 
Avatar de NGasparotto
 
Nicolas Gasparotto
Inscription : janvier 2007
Messages : 424
Détails du profil
Informations personnelles :
Nom : Nicolas Gasparotto

Informations forums :
Inscription : janvier 2007
Messages : 424
Points : 500
Points : 500
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.
NGasparotto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2007, 14h55   #4
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
merci pour les réponses

en fait si je mets ce code :

Code :
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 :

Citation:
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 :

Citation:
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 :

Citation:
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))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2007, 15h12   #5
Membre expérimenté

 
Avatar de NGasparotto
 
Nicolas Gasparotto
Inscription : janvier 2007
Messages : 424
Détails du profil
Informations personnelles :
Nom : Nicolas Gasparotto

Informations forums :
Inscription : janvier 2007
Messages : 424
Points : 500
Points : 500
Ok, voilà ce que j'essaierais :
Code :
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.
NGasparotto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2007, 13h46   #6
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
yes c'est propre merci !

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

Citation:
champs;champ2;champs3...
merci !!
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h15.


 
 
 
 
Partenaires

Hébergement Web