sql >> Base de Datos >  >> RDS >> Oracle

Análisis de archivos XML grandes con PL/SQL

Estás leyendo el archivo línea por línea, pero sobrescribiendo tu xmlClob con cada línea, sin agregar. Podría construir el CLOB leyendo en un varchar2 búfer y agregar, pero también puede usar el DBMS_LOB procedimientos incorporados para hacerlo por usted:

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 (
...

Cuando uso eso y cargo su archivo, obtengo el resultado:

CUZK Pod smdli.t.m 1800/9

Probablemente desee algún error de verificación en torno al DBMS_LOB llamadas, esto es solo una demostración simple.