Die Welt ist alles, was der Fall ist. - PL/SQL XMLTYPE vs dbms_xslprocessor [entries|archive|friends|userinfo]
kruzulis

[ userinfo | sc userinfo ]
[ archive | journal archive ]

Links
[Links:| bīdīties laboties aptaujāties komentāri skaitļi un fakti random xkcd kruzulis's movies ]

PL/SQL XMLTYPE vs dbms_xslprocessor [Oct. 26th, 2011|04:55 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
[Tags|, , ]

Oracle PL/SQL XMLTYPE tomēr ir ērtāks par dbms_xmldom + dbms_xmlparser + dbms_xslprocessor
Ir pat divi vienlīdz labi varianti, izmantojot XMLTYPE.

1. Ar bulciņu un cikliņu

DECLARE
  TYPE xmltype_table IS TABLE OF XMLTYPE INDEX BY PLS_INTEGER;
  XML_tab xmltype_table;
  v_xml   XMLTYPE;
  v_clob  CLOB;
  v_val   VARCHAR2(100);
BEGIN
  --Prepare xml
  v_clob := '<root>
  <many><t>11</t></many>
  <many><t>22</t></many>
  <many><t>33</t></many>
  </root>';
  v_xml  := xmltype(v_clob);
    
  --Do the xml
  SELECT VALUE(xm) xmlt BULK COLLECT
    INTO XML_tab
    FROM TABLE(xmlsequence(v_xml.extract('/root/many'))) xm;    

  FOR i IN 1 .. XML_tab.count LOOP
    v_val := XML_tab(i).extract('/many/t/text()').getStringval();
    dbms_output.put_line(v_val);
  END LOOP;
END;


2. Ar cikliņu pa taisno.

DECLARE
  v_xml XMLTYPE;
  v_clob CLOB;
  v_val VARCHAR2(100);
BEGIN
  --Prepare xml
  v_clob := '<root>
  <many><t>11</t></many>
  <many><t>22</t></many>
  <many><t>33</t></many>
  </root>';
  v_xml := xmltype(v_clob);
  
  --Do the xml
  FOR x IN (SELECT VALUE(xm) xmlt 
    FROM  TABLE(xmlsequence(v_xml.extract('/root/many'))) xm) LOOP
       v_val := x.xmlt.extract('/many/t/text()').getStringval();   
    dbms_output.put_line(v_val);        
  END LOOP;   
END;

linkir doma?