Du läser filen rad för rad, men skriver över din xmlClob med varje rad, inte bifogande. Du kan bygga upp CLOB genom att läsa in en varchar2 buffert och tillägg, men du kan också använda DBMS_LOB inbyggda procedurer för att göra det åt dig:
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 (
...
När jag använder det och laddar din fil får jag utdata:
CUZK Pod smdli.t.m 1800/9
Du vill förmodligen ha någon felkontroll kring DBMS_LOB samtal, detta är bara en enkel demo.