SQL : Cast d'un long en varchar2 - SQL/NoSQL - Programmation
Marsh Posté le 22-09-2004 à 09:53:23
Je sais qu'Oracle 8i ne sait pas faire d'oppération sur un LONG. Y'a malheureusement de grandes chances pour que ça n'ait pas changé depuis
Marsh Posté le 22-09-2004 à 11:44:44
Effectivement, tu ne peux absolument rien faire sur les types LONG.
Par contre, si tu es en 8i, tu peux convertir ton champ en CLOB (passe par une table temporaire) avec la fonction TO_LOB(). Je pense (mais c'est à vérifier) que le package dbms_lob doit contenir les fonctions de gestion des chaines de caractères qui t'intéressent...
Marsh Posté le 22-09-2004 à 12:29:02
Après quelques vérifs, j'ai pas trouvé d'équivalent de REPLACE dans le package dbms_lob.
Mais on peut peut etre se débrouiller autrement (qui a dit bricolage ? )
Tu récupères donc ton champ dans un CLOB avec la fonction TO_LOB(). Puis avec les fonctions GETLENGTH() et SUBSTR() du package DBMS_LOB, tu rebalances le contenu dans une variable VARCHAR2 et le tour est joué, il ne te reste plus qu'à faire un REPLACE sur ton varchar...
A mon avis, il n'existe pas d'autre solution (je ne parle pas de se palucher à la mimine toutes tes lignes les unes après les autres bien sur... )
Marsh Posté le 21-09-2004 à 20:45:28
Bonjour,
j'ai un table avec un champ de type LONG (super important) qui contient des valeurs du genre '0;1;toto;modifiés;5;x'.
Le pb, c'est que suite à un pb technique, il y a un bon nombre d'insert qui ont été fait sans le NLSLANG French ... du coup, tous les accents de mon champ ont disparu.
Je cherche à mettre en place une requete qui rajoute les accents. L'idée est de dire, si je vois la chaine "modifies", je la transforme en "modifiés". La fonction REPLACE fonctionne très bien .... mais sur les chaines de caractères, pas sur les champs de type LONG.
en gros je voudrais pouvoir faire :
SELECT REPLACE(monchamplong,'modifies','modifiés) FROM matable
alors, j'ai essayé de faire un cast ou un convert mais sans succès (pb d'inconsistance, à moins que je m'y prenne mal).
Qqun a une idée ?
Merci (ca m'éviterait une semaine de boulot chiant) !!!!