Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

ORA-24331: user buffer too small (dbms_xslprocessor.valueOf)

872623Jul 12 2011 — edited Jul 12 2011
Hello,

I am stuck with a problem parsing XML file ... it all went perfectly fine till i have hit a large XML file and now my procedure is returning this error ORA-24331: user buffer too small. I have googled it a bit and i found out that this is causing it dbms_xslprocessor.valueOf.

Anyway could someone help me out a bit? Below you will find my Oracle db version and proceure that i am using.

thank you!

Oracle:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production
And the procedure:
PROCEDURE xml is
BEGIN
 
 DECLARE
  l_parser  dbms_xmlparser.Parser;
  l_doc     dbms_xmldom.DOMDocument;
  l_nl      dbms_xmldom.DOMNodeList;
  l_n       dbms_xmldom.DOMNode;
  l_temp    VARCHAR2(1000); 
  v_lang_ctx NUMBER := dbms_lob.default_lang_ctx;
  v_warning NUMBER;
  v_dest_clob CLOB;
  v_src_clob BFILE; 
  v_amount NUMBER;
  v_src_offset NUMBER:=1;
  v_dest_offset NUMBER:=1;

  
  TYPE tab_type IS TABLE OF klasius_srv%ROWTYPE;  
  t_tab  tab_type := tab_type();
BEGIN

   v_src_clob := bfilename( directory => 'XML_DIR',  filename => 'srv.xml');

  dbms_lob.createtemporary(v_dest_clob, cache=>FALSE);
  dbms_lob.open(v_src_clob, dbms_lob.file_readonly);

  dbms_lob.loadclobfromfile
    (dest_lob => v_dest_clob
    ,src_bfile => v_src_clob
    ,amount => dbms_lob.getlength( v_src_clob )
    ,dest_offset => v_dest_offset
    ,src_offset => v_src_offset
    ,bfile_csid => NLS_CHARSET_ID('UTF8')
    ,lang_context => v_lang_ctx
    ,warning => v_warning
  );

  dbms_lob.close(v_src_clob);
  
  dbms_session.set_nls('NLS_DATE_FORMAT','''DD-MON-YYYY''');

  l_parser := dbms_xmlparser.newParser;

  dbms_xmlparser.parseClob(l_parser, v_dest_clob);  
  l_doc := dbms_xmlparser.getDocument(l_parser);

  dbms_lob.freetemporary(v_dest_clob);
  dbms_xmlparser.freeParser(l_parser);

  l_nl :=  dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(l_doc),'/NewDataSet/Table');


  FOR cur_emp IN 0 .. dbms_xmldom.getLength(l_nl) - 1 LOOP
    l_n := dbms_xmldom.item(l_nl,cur_emp);
    t_tab.extend;

    dbms_xslprocessor.valueOf(l_n,'code_x0020_ra',t_tab(t_tab.last).srv);
    dbms_xslprocessor.valueOf(l_n,'code_x0020_kat',t_tab(t_tab.last).sif_srv);
    dbms_xslprocessor.valueOf(l_n,'Des',t_tab(t_tab.last).de_srv);
    dbms_xslprocessor.valueOf(l_n,'Deskriptor_x0020__x0028_ang_x0029_',t_tab(t_tab.last).ang_srv);
  END LOOP;

  FORALL i IN t_tab.first .. t_tab.last
    INSERT INTO klasius_srv VALUES t_tab(i);

  COMMIT; 

  dbms_xmldom.freeDocument(l_doc);
    
END;
END;
This post has been answered by Billy Verreynne on Jul 12 2011
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 9 2011
Added on Jul 12 2011
5 comments
1,979 views