|SQL] Conversion Long en Chaine de caractère

|SQL] Conversion Long en Chaine de caractère - SQL/NoSQL - Programmation

Marsh Posté le 02-07-2007 à 14:27:19    

Bonjour.
 
J'utilise les tables d'un logiciel propriétaire basé sur Oracle. Dans celles-ci, j'ai besoin de récupérer les données d'une colonne de type LONG qui stocke des chaines de caractères.
L'inconvénient, je doit convertir le résultat sql en chaine afin de supprimer les '>' et '<', pour que ce dernier puisse être insérer dans un document xml (je veux donc faire un replace sur le résultat)
 
J'ai essayé :  
select to_char(colonne1) from table;
select to_lob(colonne1) from table;
select to_clob(colonne1) from table;
 
Impossible d'avoir ma chaine, il me jète tout le temps.
 
Je ne peux malheureusement pas passé par une table supplémentaire avec une colonne en clob :(
Impossibilité aussi d'utiliser du pl/sql, je suis limité au sql simple.
 
Une idée ?
 
Donc je vois pas trop comment m'en sortir.


---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
Reply

Marsh Posté le 02-07-2007 à 14:27:19   

Reply

Marsh Posté le 02-07-2007 à 15:08:41    

Par étape, ça ça marche :

Code :
  1. insert into temporaryLob select ownerid, to_lob(segment) from klong;
  2. select x as id,
  3. replace( replace(y, '<', '&lt;'), '>', '&gt;') as data
  4. from temporaryLob;
  5. delete from temporaryLob;


 
Le tout, ce serait de ne pas passer par une table temporaryLob, mais je vois pas trop comment faire :(


---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
Reply

Marsh Posté le 02-07-2007 à 16:33:43    

en fait ca depend du genre de lob que c'est, genre si c'est du longraw c'est la merde...
 
essaye de t'inspirer de ca:
 

Code :
  1. insert into table_destination
  2.   select b_key,UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(b_blob,DBMS_LOB.GETLENGTH(b_blob)+1,1))
  3.   from table_source


Message édité par casimimir le 02-07-2007 à 16:33:52
Reply

Marsh Posté le 02-07-2007 à 16:50:53    

A la base, le lob, c'est moi qui l'ai créé donc j'ai mis un clob (oracle..)

 

Apparemment, on ne peut pas dépasser un certain nombre de caractère avec cette fonction.

 

J'ai réussi un cast qui monte à 4000 octets (taille max d'un varchar) mais ce n'est pas encore suffisant :(

 

(l'affichage ne supporte pas les lob :()


Message édité par magicien96 le 02-07-2007 à 16:53:38

---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
Reply

Marsh Posté le 02-07-2007 à 21:41:05    

ce qu'indique casimir est la marche à suivre pourtant : tu dois saucissonner ton cblob en chaînes de 4000 caractères grace aux fonctions du package DBMS_LOB, puis faire des traîtements sur ces tranches de saucisson.

Reply

Marsh Posté le 04-07-2007 à 11:16:35    

MagicBuzz a écrit :

ce qu'indique casimir est la marche à suivre pourtant : tu dois saucissonner ton cblob en chaînes de 4000 caractères grace aux fonctions du package DBMS_LOB, puis faire des traîtements sur ces tranches de saucisson.


 
C'est bon j'ai réussi avec vos conseils :jap:
 
Par contre, 1 table de plus et 4 requêtes au lieu d'une :( (insertion, taille, selection avec segmentation et enfin suppression)


---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed