Bonjour,

je suis en train d'écrire un script Shell Unix. Dans ce script, j'ai besoin d'exécuter une requête SQL et d'insérer le résultat dans un fichier.

Pour ce faire, j'utilise le script suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
sqlplus $USER_ORA/$MDP_ORA@$DB_ORA @ictmedrej_query.sql
Fichier ictmedrej_query.sql :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
set heading off feed off line 200 pages 999 long 1000000 trimsp ON term off longchunk 100000
spool ${SAS_SORTIE_COM}ictmedrej_query.tmp;
SELECT XDRREJ FROM ICTMEDREJ WHERE FLG=1;
spool off;
Et voici le résultat (contenu du fichier généré) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
[ticket 36]
InternalMU;CONSTRUCTED;
InternalMU.contexteAppel;CONSTRUCTED;
InternalMU.contexteAppel.nature;STRING;GSM
InternalMU.contexteAppel.codeFermetureCom;STRING;N
InternalMU.contexteAppel.idPFI;STRING;0
[ticket 39]
InternalMU;CONSTRUCTED;
InternalMU.contexteAppel;CONSTRUCTED;
InternalMU.contexteAppel.nature;STRING;GSM
InternalMU.contexteAppel.idPFI;STRING;0
[ticket 40]
InternalMU;CONSTRUCTED;
InternalMU.contexteAppel;CONSTRUCTED;
InternalMU.contexteAppel.nature;STRING;GSM
InternalMU.contexteAppel.idPFI;STRING;0
[ticket 48]
InternalMU;CONSTRUCTED;
InternalMU.contexteAppel;CONSTRUCTED;
InternalMU.contexteAppel.nature;STRING;GSM
InternalMU.contexteAppel.codeFermetureCom;STRING;N
InternalMU.contexteAppel.idPFI;STRING;0
Ceci fonctionne très bien.
Le problème c'est que récemment le besoin a évolué et je dois splitter le résultat de la requête non pas dans 1 mais dans plusieurs fichiers, en fonction de la règle suivante : 2 tickets par fichier. C'est à dire que chaque fois que je rencontre la ligne [ticket n], je dois créer un nouveau fichier si il y en a déjà 2 dans le fichier.

Il paraîtrait qu'on peut faire cela directement dans le fichier SQL, en enrichissant la commande spool mais je ne vois pas comment faire.

Quelqu'un aurait une idée ?

Merci d'avance

Dany