Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1975 connectés 

  FORUM HardWare.fr
  Programmation

  Oracle : generation de scripts dynamiques ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Oracle : generation de scripts dynamiques ...

n°82188
cooltwan
Posté le 17-12-2001 à 16:24:31  profilanswer
 

Bonjour, j'ai un projet Oracle a terminer et je ne sais pas comment attaquer la derniere question :
 
Generation de scripts dynamiques (4 pts sur 20 qd meme ! ;)
Ecrire un script generant un autre script qui devra permettre de recreer une table precise de votre base (choisissez une table ne comportant que des donnees de type char, varchar2, numerique ou date) et y inserer les donnees presentes dans la table d'origine. Optez pour une solution totalement dynamique.
 
Indication donnees par le prof aujourd'hui
Ne pas faire un truc style
Insert into toto
 select * from titi
 
mais utiliser la table ALL_TAB_COLUMNS et la fonction decode ...
 
Toute aide sera bienvenue
 
A+
 
Antoine

mood
Publicité
Posté le 17-12-2001 à 16:24:31  profilanswer
 

n°82190
cooltwan
Posté le 17-12-2001 à 16:25:44  profilanswer
 

ps: on ne doit pas utiliser de plsql uniquement du sql ...

n°82611
cooltwan
Posté le 18-12-2001 à 21:37:17  profilanswer
 

H  H
H  H
HHHH
H  H
H  Help

n°82694
wouatouwou​atou
Posté le 19-12-2001 à 05:02:58  profilanswer
 

le principe est d'ecrire ton script de creation de la table...
et donc tu devras concatener des bouts de script...
Il me semble qu'il existe une commande du genre :
 
create table blabla as (select...)
Et tout ca dans une cmde que jsais plus ce ke c :D

n°82706
stefes007
M'enfin !
Posté le 19-12-2001 à 09:17:33  profilanswer
 

chte fais ca :-)))


---------------
Tef : "Je dors à poil" <-> That's me, poil-bonhomme ! Sp*m killer
n°82709
stefes007
M'enfin !
Posté le 19-12-2001 à 09:23:10  profilanswer
 

tu utilise du sql*plus ou pas?


---------------
Tef : "Je dors à poil" <-> That's me, poil-bonhomme ! Sp*m killer
n°82718
stefes007
M'enfin !
Posté le 19-12-2001 à 10:13:59  profilanswer
 

:hello: bon, j'ai une soluce, mais c pas un truc tout fait:
 
Prompt &User
Prompt &Table
 
select 'CREATE TABLE ' || table_name || ' (' from user_tables
where table_name = &Table;
 
 
 
 
select COLUMN_NAME , DATA_TYPE, DECODE(NULLABLE,'Y',' ','N','NOT NULL';) ||  
DECODE(rownum, (select count(*) from user_tab_column where table_name = '&Table' and OWNER = '&User';),';) ',', ';)
from all_tab_columns
where table_name = '&Table'
and OWNER = '&User'
order by rownum;
 
le dernier ordre select fonctionne pas: manifestement, on peut pas mettre de select dans la clause select.... ce qui pose un bleme pour la derniere virgule :gun:  
 
soluce:
 
select COLUMN_NAME , DATA_TYPE, DECODE(NULLABLE,'Y',' ','N','NOT NULL';) || ','
from all_tab_columns
where table_name = '&Table'
and OWNER = '&User'
order by rownum;
 
ca pue, car il fo retirer la derniere virgule a la main et la remplacer par une parenthese.... y'a moyen de faire ca avec une jointure de la table ( x2) mais bon, ca serait super lourd.
 
sinon, quand on veut pas se casser le cul, comme disait wouatouwouatou plus haut:
 
create table essai1 as select * from essai2;
 
et basta !
 
oublie pas le insert into ...
 
si ton prof a une bonne solution, envoie moi ca en pv stp, ca m'interesse! :bounce:

 

[edtdd]--Message édité par stefes007--[/edtdd]


---------------
Tef : "Je dors à poil" <-> That's me, poil-bonhomme ! Sp*m killer
n°82726
cooltwan
Posté le 19-12-2001 à 10:35:28  profilanswer
 

merci, sinon pour le coup de  
insert into destination
   select * from source;
 
ca marche pas dans le cas present car le but de la requete est de generer un fichier independant capable de recreer la table toute seule (exactement comme phpmyadmin pour mysql) de la forme
create table blablablabla
insert into destination blabla values blabla
....
insert into destination blabla values blabla
 
voila
 
A+

n°82761
cooltwan
Posté le 19-12-2001 à 11:46:17  profilanswer
 

je viens de faire un truc a peu pres propre qui marche pour generer une copie de la table etudiants (apres je mettrai un prompt pour que ca passe avec une table choisie par l'utilisateur mais je voulais pas taper tout le temps le meme nom donc j'ai code en statique cette partie et j'ai gere que pour des varchar car dans ma table de test etudiants il n'y a que des cols de type varchar. Je changerai ca par un decode pour gerer les types number et date par la suite.
 
SQL> desc etudiants
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 INE                                       NOT NULL VARCHAR2(11)
 NOM                                       NOT NULL VARCHAR2(100)
 PRENOM                                    NOT NULL VARCHAR2(100)
 BRANCHE                                   NOT NULL VARCHAR2(6)
 
SET ECHO OFF
SET FEEDBACK OFF
SET PAGESIZE 0
SPOOL test.sql
select 'CREATE TABLE ' || table_name||'bak'|| ' (pipeau varchar2(10));'
from user_tables
where table_name = 'ETUDIANTS';
 
select 'ALTER TABLE ' || 'ETUDIANTS' || 'bak ' || 'ADD ('||COLUMN_NAME||' '||DATA_TYPE||'('||DATA_LENGTH||';));'
from all_tab_columns
where table_name='ETUDIANTS';
 
select 'ALTER TABLE '|| 'ETUDIANTS' || 'bak '||'DROP COLUMN pipeau;'
from user_tables
where table_name = 'ETUDIANTS';
 
SPOOL OFF
SET ECHO ON
SET FEEDBACK ON
SET PAGESIZE 24
 
Cela me genere le fichier test.sql : ex:
CREATE TABLE ETUDIANTSbak (pipeau varchar2(10));                                
ALTER TABLE ETUDIANTSbak ADD (INE VARCHAR2(11));                                
ALTER TABLE ETUDIANTSbak ADD (NOM VARCHAR2(100));                                
ALTER TABLE ETUDIANTSbak ADD (PRENOM VARCHAR2(100));                            
ALTER TABLE ETUDIANTSbak ADD (BRANCHE VARCHAR2(6));                              
ALTER TABLE ETUDIANTSbak DROP COLUMN pipeau;  
 
qui marche bien:
il me reste ensuite la partie dure generer toutes les lignes d'insert mais la je bloque ...

n°82774
cooltwan
Posté le 19-12-2001 à 12:07:15  profilanswer
 

allez y a pas des masters en sql ici ... :)

mood
Publicité
Posté le 19-12-2001 à 12:07:15  profilanswer
 

n°82784
cooltwan
Posté le 19-12-2001 à 12:27:18  profilanswer
 

un indice il parait qu'il faut utiliser des updates ! :)

n°82812
cooltwan
Posté le 19-12-2001 à 13:22:23  profilanswer
 

je pense a une solution
type
on determine un attribut cle dans la table source
 
on fait une requete qui insere la valeur de la cle dans la destination
   et requete imbriquee qui fait un update pour les differents champs (un update par champs) en parcourant la table all_columns_table, je pense que ca doit marcher par contre ca foire qd il y a plusieur attributs qui forment la cle ...

 

[edtdd]--Message édité par cooltwan--[/edtdd]

n°82846
stefes007
M'enfin !
Posté le 19-12-2001 à 13:59:55  profilanswer
 

cooltwan a écrit a écrit :

 
 
SPOOL OFF
SET ECHO ON
SET FEEDBACK ON
SET PAGESIZE 24
 
Cela me genere le fichier test.sql : ex:
CREATE TABLE ETUDIANTSbak (pipeau varchar2(10));                                
ALTER TABLE ETUDIANTSbak ADD (INE VARCHAR2(11));                                
ALTER TABLE ETUDIANTSbak ADD (NOM VARCHAR2(100));                                
ALTER TABLE ETUDIANTSbak ADD (PRENOM VARCHAR2(100));                            
ALTER TABLE ETUDIANTSbak ADD (BRANCHE VARCHAR2(6));                              
ALTER TABLE ETUDIANTSbak DROP COLUMN pipeau;  




 
t'as oublie l'attribut NOT NULL.. utilise le decode que j'ai ecrit.... histoire que ca serve a qqc !


---------------
Tef : "Je dors à poil" <-> That's me, poil-bonhomme ! Sp*m killer
n°83040
cooltwan
Posté le 19-12-2001 à 19:40:28  profilanswer
 

ok c note mais j'ai un peu zappe ca car le prof nous a dit que la copie des contraintes n'etait pas obligatoire ...

n°83041
cooltwan
Posté le 19-12-2001 à 19:48:55  profilanswer
 

HHEELLLLLPPPP !!!!

n°83279
irulan
Posté le 20-12-2001 à 12:44:43  profilanswer
 

Sous Oracle j'utilise souvent la syntaxe suivante pour effectuer une copie de sauvegarde d'une table donnée (TEST par exemple):
 
CREATE TABLE TEST_BACKUP AS SELECT * FROM TEST;
 
Et ça te crée la table TEST_BACKUP à l'identique de la table TEST, avec les données dedans ! :)

 

[edtdd]--Message édité par irulan--[/edtdd]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Oracle : generation de scripts dynamiques ...

 

Sujets relatifs
Deconnecter quelqu'un d'oracle[ORACLE FORMS] Qui connait la commande "Host" ???
[Java-Oracle] Comment faire un 'desc' ? --> Ok, trouvé[PHP] JPEG dynamiques...
[oracle] où trouver une version gratuite (pas warez hein) + installOus avez vous trouvé vos meilleurs Scripts ??
[Oracle] Problème d'installation du service Oracle pour MTSOracle : SQL
[HS URGENT] Transférer une Base Oracle 6i vers un Oracle 9iListes Dynamiques sous PHP !!!
Plus de sujets relatifs à : Oracle : generation de scripts dynamiques ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR