Skip to Main Content

DevOps, CI/CD and Automation

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-31167: XML nodes over 64K in size cannot be inserted

user615423Jul 20 2009 — edited Aug 3 2009
HI All,

Tried to read an XML document which is column(transaction_document) for table(hr_api_transactions) using XMLDOM. This
column is a CLOB Column . I have tried to collect the values in Different
Columns from this Document. But now if the Document size exceeed 64K ; code is
unable to read the Document using Program(XMLDOM).

please find my code below...

PROCEDURE ag_xml_trig(p_document CLOB
,p_scorecard_id number)
AS
l_doc xmldom.domdocument;
l_nodelist xmldom.domnodelist;
l_nodelist1 xmldom.domnodelist;
l_nodelist2 xmldom.domnodelist;
l_nodelist3 xmldom.domnodelist;
l_nodelist4 xmldom.domnodelist;
l_nodelist5 xmldom.domnodelist;
l_node xmldom.domnode;
l_node2 xmldom.domnode;
l_node4 xmldom.domnode;
l_node_name VARCHAR2 (200);
l_node_value VARCHAR2 (200);
l_length NUMBER;
l_length1 NUMBER;
l_length2 NUMBER;
l_length3 NUMBER;
n DBMS_XMLDOM.domnode;
l_date_start VARCHAR2 (100);
l_transactionid VARCHAR2 (100);
BEGIN
l_doc := DBMS_XMLDOM.newdomdocument (P_DOCUMENT);
l_nodelist2 :=DBMS_XMLDOM.getelementsbytagname (l_doc, 'TransCtx'); --newly2
l_length2 := DBMS_XMLDOM.getlength (l_nodelist2);
l_node2 := DBMS_XMLDOM.item (l_nodelist2, 0);
l_nodelist3 := DBMS_XMLDOM.getchildnodes (l_node2);
l_length3 := DBMS_XMLDOM.getlength (l_nodelist3);
FOR j IN 0 .. l_length3 - 1 LOOP
l_node2 := DBMS_XMLDOM.item (l_nodelist3, j);
l_node_name := DBMS_XMLDOM.getnodename (l_node2);
l_node2 := DBMS_XMLDOM.getfirstchild (l_node2);
IF DBMS_XMLDOM.getnodetype (l_node2) = DBMS_XMLDOM.text_node THEN
IF (l_node_name = 'TransactionId') THEN
l_TransactionId := DBMS_XMLDOM.getnodevalue (l_node2);
END IF;
END IF;
END LOOP;
l_nodelist :=DBMS_XMLDOM.getelementsbytagname (l_doc, 'ObjectiveEORow');
l_length := DBMS_XMLDOM.getlength (l_nodelist);
FOR k IN 0 .. l_length - 1 LOOP
l_date_end := NULL;
l_date_start := NULL;
l_weightingpercent := NULL;
l_scorecardid := NULL;
l_node := DBMS_XMLDOM.item (l_nodelist, k);
l_nodelist1 := DBMS_XMLDOM.getchildnodes (l_node);
l_length1 := DBMS_XMLDOM.getlength (l_nodelist1);

FOR i IN 0 .. l_length1 - 1 LOOP
l_node := DBMS_XMLDOM.item (l_nodelist1, i);
l_node_name := DBMS_XMLDOM.getnodename (l_node);
l_node := DBMS_XMLDOM.getfirstchild (l_node);
IF DBMS_XMLDOM.getnodetype (l_node) = DBMS_XMLDOM.text_node THEN
IF (l_node_name = 'ObjectiveId') THEN
l_date_start := DBMS_XMLDOM.getnodevalue (l_node);
END IF;
END IF;
END LOOP;
INSERT INTO hrms_xml_trig_tbl(transaction_id
,objective_id
)
VALUES (l_transactionid
,l_date_start
);
END LOOP;
DBMS_XMLDOM.freedocument (l_doc);
END ag_xml_trig;

Is ther any other way to read CLOB documnet.

Please suggest me.

Thanks,
Visu
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 31 2009
Added on Jul 20 2009
14 comments
5,483 views