在Oracle中使用PL/SQL解析XML和执行DML操作时,哪种方法是面向性能的?
我在PL/SQL过程中解析XML时遇到了不同的方法,如 第一种方式:在Oracle中使用PL/SQL解析XML和执行DML操作时,哪种方法是面向性能的?,xml,oracle,parsing,Xml,Oracle,Parsing,我在PL/SQL过程中解析XML时遇到了不同的方法,如 第一种方式: 另一种是使用XSL处理器,比如 indoc := '<Student Enrolled="TRUE"> <SID>1</SID> </Student> <Student Enrolled="FALSE"> <SID>1</SID
另一种是使用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;
indoc:='
1.
1.
詹姆斯
卡梅隆
';
indomdoc:=dbms_xmldom.newDomDocument(indoc);
l_nl:=dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(indomdoc),
“//学生[@created=“TRUE”]”;
/*循环以更新学生信息*/
对于0中的cur_stu。。dbms_xmldom.getLength(l_nl)-1循环
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()”;
/*更新学生资料*/
更新STUDENTTABLE st
设置st.firstname=stu_选项卡(1).firstname,
st.lastname=stu_选项卡(1)。lastname
其中es.SID=stu_tab(1.SID);
端环;
使用游标或xsl处理器和DOM,上面哪种方法可以产生更好的性能
请告诉我是否有其他更好的解决方案可用于解析XML
我是甲骨文的新手,因此正在学习……想尝试几种方法,想知道哪种是最好的
任何帮助都将不胜感激
谢谢,
Sameer.我们使用xmltable在plsql中处理xml-s。如果您关心性能,请尝试自己测量性能,有不同的方法,其中之一是autotrace
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;