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.