Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Analysieren großer XML-Dateien mit PL/SQL

Sie lesen die Datei Zeile für Zeile, überschreiben aber Ihren xmlClob mit jeder Zeile, nicht anhängen. Sie könnten das CLOB aufbauen, indem Sie in ein varchar2 einlesen zwischenspeichern und anhängen, aber Sie können auch DBMS_LOB verwenden eingebaute Prozeduren, die das für Sie erledigen:

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

Wenn ich das benutze und Ihre Datei lade, bekomme ich die Ausgabe:

CUZK Pod smdli.t.m 1800/9

Sie möchten wahrscheinlich eine Fehlerüberprüfung rund um DBMS_LOB Anrufe, dies ist nur eine einfache Demo.