1
我在不同的方法來在解析在PL/SQL程序的XML像在解析XML並在Oracle中使用PL/SQL執行DML操作時,哪種方法以性能爲導向?
第一種方式:
CURSOR datahold_xml(student_xmldoc IN xmltype) IS
SELECT extractvalue(value(t), '/Student/@Enrolled') Enrolled,
extractvalue(value(t), '/Student/SID') StudentID,
FROM TABLE(xmlsequence(extract(student_xmldoc , '/Student'))) t;
FOR tempresult_xml IN datahold_xml(student_xmldoc => l_xml) LOOP
IF UPPER(tempresult_xml.Enrolled) = UPPER('TRUE') THEN
/* Update Employee Information*/
UPDATE STUDENTTABLE st
SET st.firstname = tempresult_xml.FirstName,
st.lastname = tempresult_xml.LastName
WHERE st.SID= tempresult_xml.StudentID;
ELSE
/* Do Insert Operation*/
INSERT INTO STUDENTTABLE (SID,FIRSTNAME,LASTNAME,STATUS)
VALUES
(STUDENT_SEQ.NEXTVAL,tempresult_xml.FirstName, tempresult_xml.LastName,'A');
END IF;
END LOOP;
另一種是使用XSL處理器一樣
indoc := '<Student Enrolled="TRUE">
<SID>1</SID>
</Student>
<Student Enrolled="FALSE">
<SID>1</SID>
<FirstName>James</FirstName>
<LName>Cameron</LName>
</Student>';
indomdoc := dbms_xmldom.newDomDocument(indoc);
l_nl := dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(indomdoc),
'//STUDENT[@Enrolled="TRUE"]');
/* Loop to Update Student Information */
FOR cur_stu IN 0 .. dbms_xmldom.getLength(l_nl) - 1 LOOP
l_n := dbms_xmldom.item(l_nl, cur_stu);
stu_tab.extend;
stu_tab(stu_tab.first).FIRSTNAME := dbms_xslprocessor.valueOf(l_n,
'FirstName/text()');
stu_tab(stu_tab.first).LASTNAME := dbms_xslprocessor.valueOf(l_n,
'LName/text()');
stu_tab(stu_tab.first).SID := dbms_xslprocessor.valueOf(l_n,
'ID/text()');
/* Update Student Information*/
UPDATE STUDENTTABLE st
SET st.firstname = stu_tab(1).FIRSTNAME,
st.lastname = stu_tab(1).LASTNAME
WHERE es.SID= stu_tab(1).SID;
END LOOP;
上述哪個方法可以產生更好的性能,使用遊標或xsl處理器和DOM。
請讓我知道是否有任何其他更好的解決方案可用於解析XML。
我是ORACLE的新手,因此在學習過程中。想要嘗試一些方法,並想知道哪個是最好的。
任何幫助,將不勝感激。
謝謝, Sameer。