CLOB vers un fichier xml sur le disque
Bonjour,
Je bloque depuis la semaine dernière sur un problème.
Je voudrais extraire de ma base de donnée, le contenu d'un champ CLOB dans un fichier au format xml sur le disque. Le clob est lui même au format xml dans la base.
J'arrive à extraire le contenu du clobb mais le formatage des balises dans le fichier de destination n'est pas bon.
En fait j'ai des retou à ligne avant le fermeture de certaines balise.
Je ne peut utiliser le package UTL_FILE.
Merci d'avance.
Ma procédure pour extraire le clob est la suivante:
DECLARE
vclob CLOB;
str VARCHAR2(4000);
vstart NUMBER := 1;
bytelen NUMBER := 2000;
len NUMBER;
x NUMBER;
BEGIN
-- get length of blob
SELECT dbms_lob.getlength(fxl_a_xml)
INTO len
from formulaire.formulaire_xml fx, formulaire.formulaire f
where fx.frm_id = f.frm_id
and f.frm_id = &frm_id
;
-- save blob length
x := len;
-- select blob into variable
SELECT fxl_a_xml
INTO vclob
from formulaire.formulaire_xml fx, formulaire.formulaire f
where fx.frm_id = f.frm_id
and f.frm_id = &frm_id
;
dbms_output.ENABLE(100000);
dbms_output.put_line('Le XML fait ' || len || ' octets de long');
vstart := 1;
WHILE vstart < len and bytelen > 0
LOOP
-- set the end position if less than bytelen bytes left
IF x < bytelen THEN
bytelen := x;
END IF;
dbms_lob.read(vclob,bytelen,vstart,str);
dbms_output.put_line(SUBSTR(str,1,INSTR (str, CHR(10))));
str:=SUBSTR(str,INSTR (str, CHR (10))+1);
dbms_output.put(str);
vstart := vstart + bytelen;
x := x - bytelen;
end loop;
dbms_output.put_line('');
dbms_output.put_line('Fin avec succès');
END;
/
Utiliser un select direct sous sqlplus
Bonjour,
Plutôt que pour faire du dbms_output vous pouvez carrément faire un select du champ sous sqlplus avec le spool qui va bien.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
WHENEVER SQLERROR exit 1
WHENEVER OSERROR exit 2
-- Environnement SqlPlus
set echo off
set feedback off
set heading off
set linesize 500
set long 10000000
set longchunksize 500
set pagesize 0
set termout off
set trimout on
set trimspool on
set wrap on
-- Parametres
define frm_id='&&1'
spool mon_fichier&frm_id..xml
Select fxl_a_xml
From formulaire.formulaire_xml fx,
formulaire.formulaire f
Where fx.frm_id = f.frm_id
And f.frm_id = &frm_id;
spool off
exit; |
Pozzo