Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > Informix
Informix Forum d'entraide Informix
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 17/03/2008, 17h41   #1
Invité régulier
 
Inscription : septembre 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 25
Points : 6
Points : 6
Par défaut Génération d'un spool depuis Informix/Dbaccess

Bonjour

Je souhaiterai réaliser une chose qui me paraît très simple mais pour laquelle je ne trouve pas de solution (de par sans doute mon peu d'expérience sous Informix et Dbaccess).

Mon but : obtenir le spool d'une table, incluant la liste des rubriques dans la première ligne.

En utilisant certaines infos découvertes dans les forums de Developpez.com, j'ai créé le script suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
db=dvi
dbaccess <<EOF
DATABASE ${db} ;
 
output TO B64_a2741.txt 
 
SELECT "a2741", * 
FROM a2741 ;
 
EOF
Ce script me fournit le résultat suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
(constant)   a2741
np_jmal      B64-PJMAL1001000
dcrep_j      20080102
cmnelotd_r   DR
dtrtlotd_r   20080102
nordlotd_r   1
ndptcpud_r   082
ntitrec      81111111000100
cgrg_ges     1
ndpt_ges     031
netsgeo_fss  02000547
netsgeo      02000547
netsjur_fss  02000547
netsjur      02000547
nlotpds      581
cntuopenor   1
dcrelot      20071001
dentets      20080101
dliqges      20080105
nmdttpg      123456789012345
vp_odmdpds   1234.56
vp_cdmdpds   78.09
vdmdpds      1312.65
vpaypds      1312.65
bemipmt      20080106
cdcsagc      0
ddcscpt      20080107
ctyppmtcpu   PR
lfil_sql     
vsrl_a2741   9937
 
...
Or, je voudrais obtenir :

Code :
1
2
3
4
 
(constant);np_jmal;dcrep_j;cmnelotd_r;dtrtlotd_r;nordlotd_r;ndptcpud_r;ntitrec;cgrg_ges;ndpt_ges;netsgeo_fss;netsgeo;netsjur_fss;netsjur;nlotpds;cntuopenor;dcrelot;dentets;dliqges;nmdttpg;vp_odmdpds;vp_cdmdpds;vdmdpds;vpaypds;bemipmt;cdcsagc;ddcscpt;ctyppmtcpu;lfil_sql;vsrl_a2741
a2741;B64-PJMAL1001000;20080102;DR;20080102;1;082;81111111000100.0;1;031;02000547;02000547;02000547;02000547;581;1;20071001;20080101;20080105;123456789012345.0;1234.56;78.09;1312.65;1312.65;20080106;0;20080107;PR;;9937;
...
Pourriez-vous m'indiquer les options proposées par dbacces ou me fournir un exemple de script qui me permettrait d'obtenir ce second format de spool ?

Merci par avance pour vos informations.
dvi24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2008, 09h06   #2
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 499
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 499
Points : 9 682
Points : 9 682
Bonjour,

Je pense qu'une solution serait d'utiliser unload, qui te permet de formater la sortie sous la forme que tu attends (ou presque, puisque ca ne mets pas de ';' mais des '|').

Avec ton code, sauf erreur, cela donnerait :
Code :
1
2
3
4
5
6
7
8
9
10
11
db=dvi
dbaccess <<EOF
DATABASE ${db} ;
 
output TO B64_a2741.txt 
 
UNLOAD TO /dev/stdout
SELECT "a2741", * 
FROM a2741 ;
 
EOF
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2008, 09h26   #3
Invité régulier
 
Inscription : septembre 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 25
Points : 6
Points : 6
Bonjour

Merci pour ta réponse.

J'ai effectué le test (voir code ci-dessous) ... Malheureusement, la ligne d'entête n'apparaît pas. Existe-t-il une option d'UNLOAD permettant de récupérer les noms des rubriques en première ligne ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
db=dvi
dbaccess <<EOF
DATABASE ${db} ;
 
UNLOAD TO B64_a2741_tmp.txt 
 
SELECT "a2741", * 
FROM a2741 ;
 
EOF
 
sed s/'|'/';'/g B64_a2741_tmp.txt > B64_a2741.txt
dvi24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2008, 15h51   #4
Invité régulier
 
Inscription : septembre 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 25
Points : 6
Points : 6
Par défaut Solution ...

Bon, j'avoue, c'est pas vraiment l'idéal (je pensais trouver une solution plus directe) ... Mais ça me donne le résultat attendu.

1/ Spool des données
2/ Spool des rubriques depuis systables et syscolumns
3/ Mise en colonne du spool des rubriques
4/ Concaténation du spool des rubriques et du spool des données

Voici le script :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
db=dvi
dbaccess <<F_DATA
DATABASE ${db} ;
 
UNLOAD TO B64_a2741_tmp.txt DELIMITER ";"
 
SELECT * 
FROM a2741 ;
 
F_DATA
 
dbaccess <<F_RUB
DATABASE ${db} ;
 
UNLOAD TO B64_a2741_rubriques_tmp.txt DELIMITER ";"
 
SELECT syscolumns.colname 
FROM systables, syscolumns
WHERE systables.tabid = syscolumns.tabid
  AND systables.tabname = "a2741"
 
F_RUB
 
cat B64_a2741_rubriques_tmp.txt | tr -d "\n" > B64_a2741_rubriques.txt
 
cat B64_a2741_rubriques.txt B64_a2741_tmp.txt > B64_a2741.txt
 
rm B64_a2741_tmp.txt
rm B64_a2741_rubriques.txt
rm B64_a2741_rubriques_tmp.txt
Merci à gangsoleil, sur le Forum, et à Alain, par mail, pour l'aide apportée.
dvi24 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 09h10.


 
 
 
 
Partenaires

Hébergement Web