Vous lisez le fichier ligne par ligne, mais écrasez votre xmlClob
avec chaque ligne, sans ajout. Vous pouvez créer le CLOB en lisant dans un varchar2
tampon et ajout, mais vous pouvez également utiliser le DBMS_LOB
procédures intégrées pour le faire pour vous :
DECLARE
xmlClob CLOB;
xmlFile BFILE;
x XMLType;
src_offset number := 1 ;
dest_offset number := 1 ;
lang_ctx number := DBMS_LOB.DEFAULT_LANG_CTX;
warning integer;
BEGIN
xmlFile := BFILENAME('XMLPARSERADRESYCUZK', 'pokus.xml');
DBMS_LOB.CREATETEMPORARY(xmlClob, true);
DBMS_LOB.FILEOPEN(xmlFile, DBMS_LOB.FILE_READONLY);
DBMS_LOB.LOADCLOBFROMFILE(xmlClob, xmlFile, DBMS_LOB.LOBMAXSIZE, src_offset,
dest_offset, DBMS_LOB.DEFAULT_CSID, lang_ctx, warning);
x := XMLType.createXML(xmlClob);
DBMS_LOB.FILECLOSEALL();
DBMS_LOB.FREETEMPORARY(xmlClob);
FOR r IN (
...
Lorsque j'utilise cela et que je charge votre fichier, j'obtiens le résultat :
CUZK Pod smdli.t.m 1800/9
Vous voulez probablement un contrôle d'erreur autour du DBMS_LOB
appels, il ne s'agit que d'une simple démonstration.