Tu peux peut etre opter pour une solution mixte perl/shell, cela peut s'averer pratique dans ce cas.
1/ Identifier les tables
cut -f2 -d',' fichier_definition | sort | uniq > table_names.list
2/ pour chaque table creer un premier fichier contenant la definition des colonnes :
1 2 3 4 5
|
mkdir defs
for i in `cat table_names.list` ; do
grep $i fichier_definition > defs/$i
done |
3/ pour chaque liste de colonnes les transformer en sql "partiel" :
1 2 3 4
|
for i in `ls defs/*`; do
perl -pi -e 's/(.*)\, (.*)\,(.*),\,(.*)/$1 $4 \($3\) \,/' defs/$i
done |
4/ rajouter le statement create table pour chacune des tables
1 2 3 4 5 6 7
|
mkdir sql
for i in `ls defs/*' ; do
echo "create table $i (" >> sql/create.sql
cat defs/$i >> sql/create.sql
echo ");" >> sql/create.sql
done |
Au final tu devrais avoir un fichier sql/create.sql qui ressemble a
1 2 3 4 5 6
| create table QUAR (
CDCOM SMALLINT (2),
CDDEP SMALLINT(1),
...
);
... |
C'est pas une solution optimale, ( l'optimale serait de faire toutes les transformation dans un script Perl, cf tuto donné par Katyucha ), mais ca peut te depanner en te donnant un debut de solution. Apres a toi d'ameillorer la choze.
PS : j'ai ecrit ca a la volée,sans linux ni cygwin à porté de main, alors c'est a tester et certainement a fignoler avant usage final .
Partager