Convertir VARCHAR2 en CHAR
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:
Code:
1 2 3 4
|
aaaaaaaa bbbbbb ccccc
aaa bbbbb ccccccc
aaaaaaaaa bbbbbb cc |
Mais cela donne ceci :
Code:
1 2 3 4
|
aaaaaaaa bbbbbb ccccc
aaa bbbbb cccccccc
aaaaaaaaa bbbbbb cc |
Pour le moment j'utilise la commande CHR(9) pour faire des tabulations et séparer les colonnes.
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:
Code:
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; |
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).
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.