MEMO-PL/SQL SELECT XML Nodes FROM XmlType
今天跟同事商討整合規格時,遇到一個議題: 如果將多筆資料轉成XML Element,以XML String方式寫入ORACLE欄位,在Stored Procedure裡可否比照Table,用SELECT的方式將多筆資料查詢出來呢?
剛好前幾天另一位同事提到Oracle 9+支援XmlType,現學現賣,再參考網路上的資料,我寫了以下的範例:
DECLARE
xt XmlType;
TYPE refCur IS REF CURSOR;
rc refCur;
t VARCHAR2(1024);
i NUMBER;
BEGIN
xt := XmlType(
'<root><item>Item1</item><item>Item2</item><item>Item3</item></root>');
OPEN rc FOR
SELECT extractValue(value(x), '//item/text()') as ItemText
FROM TABLE(XmlSequence(EXTRACT(xt, '//item'))) X;
i := 0;
LOOP
FETCH rc INTO t;
EXIT WHEN rc%NOTFOUND;
i := i + 1;
dbms_output.put_line(i || '->' || t);
END LOOP;
END;
執行結果為:
1->Item1
2->Item2
3->Item3
測試成功!