Bonjour!
J'ai un texte fichier programme1.out qui ressemble à ca :
Code :
- connect to oracle (&conxora);
- create table table1 as
- select ID_PERS
- from connection to oracle
- (
- select distinct pers.ID_PERS
- FROM tab_grp grp , tab_pers pers
- where date_deb_grp <= &date_quote
- and (date_fin_grp is null or date_fin_grp > &date_quote)
- and pers.id_pers = grp.id_pers
- and (pers.date_supp_si is null or pers.date_supp_si > &date_quote)
- order by id_pers
- );
- disconnect from oracle;
- connect to oracle (&conxora);
- create table table2 as
- select ID_PERS,
- ID_PRODUIT,
- CODE_PRODUIT,
- TOP_1
- TOP_2
-
- from connection to oracle
- (
- select ID_PERS,
- ID_PRODUIT,
- CODE_PRODUIT,
- max (case when (CODE ='01' ) then 1 else 0 end) as TOP_1
- max (case when (CODE='02' ) then 1 else 0 end) as TOP_2
- from table_from1
- where CODE in ('01','02')
- and ID_MOIS <= &id_mois
- group by ID_PERS,ID_PRODUIT
- );
- disconnect from oracle;
|
A partir de ce fichier, il faudrait que je récupère pour chaque requête (entre connect to oracle et disconnect from oracle) le nom de la table créée, le nom des tables utilisées (celle dans les FROM, le vrai nom, pas l'alias) ainsi que les différentes colonnes sélectionnées dans le select.
A l'arrivée je voudrai avoir un affichage dans ce genre : table_cree | nom_table_from | nom_colonne
Exemple :
Code :
- table1;tab_grp;
- table1;tab_pers;ID_PERS
- table2;table_from1;ID_PRODUIT
- table2;table_from1;CODE_PRODUIT
- table2;table_from1;TOP_1
- table2;table_from1;TOP_2
|
Sur mon pc sous ubuntu en bash ce script fonctionne :
Code :
- var=$(cat programme1.out)
- sed -n '/connect to oracle/,/disconnect from oracle/{s/connect to oracle (&conxora)\;//g;s/disconnect from oracle\;//g;s/\;/\n/g;p}' <<< $var | while read ligne
- do
- donnee=$(sed 's/^create table \(.*\) as select \(.*\) from connection .*from \(.*\) where ..*$/table="\1" nom_colonne="\2" nom_table_from="\3"/I' <<< $ligne)
- eval $donnee
- echo "$table
- $nom_colonne
- $nom_table_from
- "
- done
|
resultat:
Code :
- table1
- ID_PERS
- tab_grp grp , tab_pers pers
- table2
- ID_PERS, ID_PRODUIT, CODE_PRODUIT, TOP_1 TOP_2
- table_from1
- table2
- ID_PERS, ID_PRODUIT, CODE_PRODUIT, TOP_1 TOP_2
- table_from1
|
Cela n'est pas encore exactement ce que j'attend mais c'est déja un bon début.
Quand j'essaye ce script sur un environnement IBM UNIX AIX en bash j'obtient cette erreur :
sed: Function /connect to oracle/,/disconnect from oracle/{s/connect to oracle (&conxora)\;//g;s/disconnect from oracle\;//g;s/\;/
\n/g;p} cannot be parsed
Et en ksh :
ksh: syntax error: `<' unexpected (bon ça c'est normal le script est fait en bash)
En modifiant le premier sed j'ai une erreur sur le deuxième :
Code :
- var=$(cat programme1.out)
- sed -n 's/connect to oracle (&conxora)\;//g;s/disconnect from oracle\;//g;s/\;/\n/g;p' <<< $var | while read ligne
- do
- donnee=$(sed 's/^create table \(.*\) as select \(.*\) from connection .*from \(.*\) where ..*$/table="\1" nom_colonne="\2" nom_table_from="\3"/I' <<< $ligne)
- eval $donnee
- echo "$table $nom_colonne $nom_table_from"
- done
|
sed: Function s/^create table \(.*\) as select \(.*\) from connection .*from \(.*\) where ..*$/table="\1" nom_colonne="\2" nom_tab
le_from="\3"/I cannot be parsed
Vous avez une idée d'où peuvent venir ces erreurs? version de sed?
Merci
Message édité par stagebi le 05-05-2009 à 11:21:29