sql >> Database teknologi >  >> RDS >> Oracle

Parsing af stor XML-fil med PL/SQL

Du læser filen linje for linje, men overskriver din xmlClob med hver linje, ikke tilføjende. Du kan bygge CLOB'en op ved at læse ind i en varchar2 buffer og tilføjelse, men du kan også bruge DBMS_LOB indbyggede procedurer til at gøre det for 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 jeg bruger det og indlæser din fil, får jeg outputtet:

CUZK Pod smdli.t.m 1800/9

Du vil sandsynligvis have en fejlkontrol omkring DBMS_LOB opkald, dette er blot en simpel demo.




  1. Opret flere tabeller ved at cykle gennem en forespørgsel

  2. Forskellen mellem to år måned og dag værdier i Oracle

  3. Sådan opdaterer du databasen, mens du markerer afkrydsningsfeltet med jquery?

  4. Vælge en specifik kunde i MYSQL?