Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Oracle中使用PL/SQL解析XML和执行DML操作时,哪种方法是面向性能的?_Xml_Oracle_Parsing - Fatal编程技术网

在Oracle中使用PL/SQL解析XML和执行DML操作时,哪种方法是面向性能的?

在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

我在PL/SQL过程中解析XML时遇到了不同的方法,如

第一种方式:



另一种是使用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;