Oracle
 sql >> Base de données >  >> RDS >> Oracle

Analyser un gros fichier XML avec PL/SQL

Vous lisez le fichier ligne par ligne, mais écrasez votre xmlClob avec chaque ligne, sans ajout. Vous pouvez créer le CLOB en lisant dans un varchar2 tampon et ajout, mais vous pouvez également utiliser le DBMS_LOB procédures intégrées pour le faire pour vous :

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

Lorsque j'utilise cela et que je charge votre fichier, j'obtiens le résultat :

CUZK Pod smdli.t.m 1800/9

Vous voulez probablement un contrôle d'erreur autour du DBMS_LOB appels, il ne s'agit que d'une simple démonstration.