Bonjour,
Dans une procédure je transfère des données dans un fichier .lis via la commande UTL_FILE. Ces données doivent être ordonnées en colonnes et chaque colonne peut recevoir des données de tailles différentes (essentiellement du VARCHAR2). Cela devrait donner ceci:
Mais cela donne ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 aaaaaaaa bbbbbb ccccc aaa bbbbb ccccccc aaaaaaaaa bbbbbb cc
Pour le moment j'utilise la commande CHR(9) pour faire des tabulations et séparer les colonnes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 aaaaaaaa bbbbbb ccccc aaa bbbbb cccccccc aaaaaaaaa bbbbbb cc
Le problème est qu'en VARCHAR2 la commande CHR(9) s'avère inutile. En effet certaines de mes données peuvent varier de 5 à 30 caractères. Je me disais donc que convertir en CHAR mes données (reçues via des select) serait la solution.
J'ai testé en utilisant des variables déclarées en CHAR qui reçoivent les données en VARCHAR2. En code cela donne quelque chose comme ça:
Cette solution fonctionne mais cela me fait beaucoup de variable à déclarer, et je n'aime pas le fait que les déclarations soient faites en dur (c'est-à-dire que la taille des variables soient entrées dans le code).
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 CURSOR c IS SELECT col1, col2, col3 ... -- données en VARCHAR2 FROM ... WHERE ...; w c%rowtype; var1 CHAR(50); var2 CHAR(50); var3 CHAR(50); ... BEGIN ... FOR w IN c LOOP var1 := w.col1; var2 := w.col2; var3 := w.col3; UTL_FILE.PUT_LINE(fichier, var1||CHR(9) ||var2||CHR(9) ||var3); END LOOP; ... END;
Je pose donc ma question, y a t-il une commande pour convertir un VARCHAR2 en CHAR ?
Si non auriez-vous une autre solution ?
PS: évidemment quand je dis convertir en CHAR cela veut dire gardé la taille du VARCHAR2 : VARCHAR2(30) -> CHAR(30) même s'il n'y a que 15 caractères.
Partager