2011-02-15 43 views
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。

回答

0

我們使用xmltable在plsql中處理xml -s。如果你關心表現,試着爲自己衡量它,有不同的方法,其中之一是自動跟蹤。

相關問題