1. 程式人生 > >oracle xml資料構建 XMLType相關函式

oracle xml資料構建 XMLType相關函式

DEPTH(n)
DEPTH(n):該函式用於返回XML方案中UNDER_PATH路徑所對應的相對層數,其中引數n用於指定相對層數。示例如下:
SQL> SELECT PATH(1),DEPTH(2) FROM resource_view
2 WHERE UNDER_PATH(res, '/sys/schema/OE', 1)=1
3 AND UNDER_PATH(res, '/sys/schema/OE', 2)=1;
PATH(1) DEPTH(2)

---------------------------- --------
/www.oracle.com 1
/www.oracle.com/xwarehouses.xsd 2


2.2 EXISTSNODE(XMLType_instance,Xpath_string)
EXISTSNODE(XMLType_instance,Xpath_string):該函式用於確定特定的XML節點的路徑是否存在,返回0表示節點不存在,返回1表示節點存在。其中引數XMLType_instance用於指定XMLType例項,Xpath_string用於指定XML節點路徑。示例如下:
SQL> SELECT existsnode(VALUE(p),'/PurchaseOrder/User') node
2 FROM xmltable p;
NODE

------------
1

2.3 EXTRACT(XMLType_instance,Xpath_string)

EXTRACT(XMLType_instance,Xpath_string):該函式用於返回XML節點路徑下的相應內容。其中引數XMLType_instance用於指定XMLType例項,Xpath_string用於指定XML節點路徑。示例如下:
SQL> SELECT extract(value (p),'/PurchaseOrder/User') content
2 FROM xmltable p;
CONTENT

--------------------------------------------------
<User>ADAMS</User>

2.4 EXTRACTVALUE(XMLType_instance,Xpath_string)

EXTRACTVALUE(XMLType_instance,Xpath_string):該函式用於返回特定XML節點路徑的資料。其中引數XMLType_instance用於指定XMLType例項,Xpath_string用於指定XML節點路徑。示例如下:
SQL> SELECT extractvalue(value(p),'/PurchaseOrder/User') data
2 FROM xmltable p;
DATA

-------------------------------------------------
ADAMS

2.5 PATH(correction_integer)
PATH(correction_integer):該函式用於返回特定XML資源所對應的相對路徑,引數correction_integer用於指定路徑層數。示例如下:
SQL> SELECT PATH(1), DEPTH(2) FROM resource_view
2 WHERE UNDER_PATH(res, '/sys/schemas/OE', 1)=1
3 AND INDER_PATH(res,'/sys/schemas/OE',2)=1;
PATH(1) DEPTH(2)

---------------------------- --------

/www.oracle.com 1
/www.oracle.com/xwarehouses.xsd 2

2.6 SYS_DBURIGEN({column|attribute})
SYS_DBURIGEN({column|attribute}):該函式用於根據列或者屬性生成型別為DBUrlType的URL。引數column用於指定列名,attribute用於指定物件屬性名。示例如下:
SQL> SELECT sys_dburigen(ename) url FROM emp WHERE deptno=10;
URL(URL, SPARE)

--------------------------------------------------------
DBURITYPE('/PUBLIC/EMP/ROW[ENAME='CLARK'] /ENAME', NULL)
DBURITYPE('/PUBLIC/EMP/ROW[ENAME='KING'] /ENAME', NULL)
DBURITYPE('/PUBLIC/EMP/ROW[ENAME='MILLER'] /ENAME', NULL)

2.7 SYS_XMLAGG(expr[,fmt])
SYS_XMLAGG(expr[,fmt]):該函式用於彙總所有XML文件,並生成一個XML文件。示例如下:
<SQL> SELECT SYS_XMLAGG(SYS_XMLGEN(ename)) xml_content
2 FROM emp;
XML_CONTENT

----------------------------------------------------

<?xml version="1.0"?>
<ROWSET>
<ENAME>SMITH</ENAME>
<ENAME>ALLEN</ENAME>
<ENAME>WARD</ENAME>
<ENAME>JONES</ENAME>
<ENAME>MARTIN</ENAME>
<ENAME>BLAKE</ENAME>
<ENAME>CLARK</ENAME>
<ENAME>SCOTT</ENAME>
<ENAME>KING</ENAME>
<ENAME>TURNER</ENAME>
<ENAME>ADAMS</ENAME>
<ENAME>JAMES</ENAME>
<ENAME>FORD</ENAME>
<ENAME>MILLER</ENAME>
</ROWSET>

2.8 SYS_XMLGEN(expr[,fmt])
SYS_XMLGEN(expr[,fmt]):該函式用於根據資料庫表的行和列生成XMLType例項。引數expr用於指定列名,fmt用於指定格式。示例如下:
SQL> SELECT sys_xmlgen(ename) xml FROM emp WHERE deptno=10;
XML
-----------------------------------------------------
<?xml version="1.0"?>
<ENAME>CLARK</ENAME>
<?xml version="1.0"?>
<ENAME>MILLER</ENAME>

2.9 UPDATEXML(XMLType_instance,Xpath_string,value_expr)
UPDATEXML(XMLType_instance,Xpath_string,value_expr):該函式用於更新特定XMLType例項相應的節點路徑的內容。其中引數XMLType_instance用於指定XMLType例項,Xpath_string用於指定XML節點路徑,value_expr用於指定新值。示例如下:
SQL> UPDATE xmltable p SET p=UPDATEXML(value (p),
2 '/PurchaseOrder/User/text() ','SCOTT');

2.10 XMLAGG(XMLType_instance[ORDER BY sort_list])
XMLAGG(XMLType_instance[ORDER BY sort_list]):該函式用於彙總多個XML塊,並生成XML文件。其中引數XMLType_instance用於指定XMLType例項,sort_list用於生成指定的排序方式。示例如下:
SQL> SELECT xmlagg(xmlelement("employee",ename||' '||sal)) xml
2 FROM emp WHERE deptno=30;
XML
---------------------------------------------------
<employee>ALLEN 1600</employee> 
<employee>WARD 1250</employee>
<employee>MARTIN 1250</employee>
<employee>BLAKE 2850</employee>
<employee>TURNER 1500</employee>
<employee>JAMES 950</employee>

2.11 XMLCOLATTVAL(value_expr[,value_expr2],...)
XMLCOLATTVAL(value_expr[,value_expr2],...):該函式用於生成XML塊,引數value_expr用於指定列名或者別名作為屬性名。示例如下:
SQL> SELECT xmlelement ("emp",xmlcolattval (ename,sal)) xml
2 FROM emp WHERE ename='SCOTT';
XML
--------------------------------------------------
<emp>
<column name="ENAME">SCOTT</column>
<column name="SAL">3000</column>
</emp>

2.12 XMLCONCAT(XMLType_instance1[,XMLType_instance2],...)
XMLCONCAT(XMLType_instance1[,XMLType_instance2],...):該函式用於連線多個XMLType例項,並生成新的XMLType例項。引數XMLType_instance用於指定XML例項。示例如下:
SQL> SELECT xmlconcat(xmlelement("ename",ename),
2 xmlelement("sal",sal)) xml
3 FROM emp WHERE deptno=10;
XML
-------------------------------------------
<ename>CLARK</ename>
<sal>2450</sal>

<ename>KING</ename>
<sal>5000</sal>

<ename>CLARK</ename>
<sal>1300</sal>

2.13 XMLELEMENT(identifier[,xml_attribute_clause][,value_expr])
XMLELEMENT(identifier[,xml_attribute_clause][,value_expr]):該函式用於返回XMLType的例項。其中引數identifier用於指定元素名,引數xml_attribute_clause用於指定元素屬性子句,引數value_expr用於指定元素值。示例如下:
SQL> select xmlelement ("DATE",sysdate) from dual;
XMLELEMENT ("DATE",SYSDATE)
------------------------------------------
<DATE>28-DEC-03</DATE>
SQL> SELECT xmlelement("Emp",
2 xmlattributes(empno AS "ID", ename)) Employee
3 FROM emp WHERE deptno=10;
EMPLOYEE
---------------------------------------------
<Emp ID="7782" ENAME="CLARK"/>
<Emp ID="7839" ENAME="KING"/>
<Emp ID="7934" ENAME="MILLER"/>

2.14 XMLFOREST(value_expr1[,value_expr2],...)
XMLFOREST(value_expr1[,value_expr2],...):該函式用於返回XML塊。示例如下:
SQL> SELECT xmlelement ("Employee",xmlforest(ename,sal))
2 FROM emp WHERE empno=7788;
XMLELEMENT ("EMPLOYEE",XMLFOREST(ENAME,SAL))
------------------------------------------------
<Employee>
<ENAME>SCOTT</ENAME>
<SAL>3000</SAL>
</Employee>

2.15 XMLSEQUENCE(xmltype_instance)
XMLSEQUENCE(xmltype_instance):該函式用於返回XMLType例項中頂級節點以下的VARRAY元素。示例如下:
SQL> SELECT xmlsequence(extract(value(x),
2 '/PurchaseOrder/LineItem/*')) varray FROM xmltable x;
VARRAY
--------------------------------------------------
XMLSEQUENCETYPE(XMLTYPE(<LineItem ItemNumber="1">
<Description>The Ruling Class</Description>
<Part Id="715515012423" UnitPrice="29.95" Quantity="2"/>
</LineItem>
), XMLTYPE(<LineItem ItemNumber="2">
<Description>Diabolique</Description>
<Part Id="037429135020" UnitPrice="29.95" Quantity="3"/>
</LineItem>
), XMLTYPE(<LineItem ItemNumber="3">
<Description>8 1/2</Description>
<Part Id="037429135624" UnitPrice="39.95" Quantity="4"/>
</LineItem>
))

2.16 XMLTRANSFORM(xmltype_instance,xsl_ss)
XMLTRANSFORM(xmltype_instance,xsl_ss):該函式用於將XMLType例項按照XSL樣式進行轉換,並生成新的XMLType例項。示例如下:
SQL> SELECT XMLTRANSFORM(w.warehouse-spec,x.coll).GetClobVal()
2 FROM warehouse w,xsl_tab x
3 WHERE w.warehouse_name='San Francisco';

CREATE TABLE purchase_order( po_no number(9),po_file xmltype)

insert into purchase_order values(68,XMLTYPE('<?xml version="1.0" encoding="UTF-8"?>
<out> 
<record id="1">
<FileName>index.jsp</FileName>
<FileID>1</FileID>
</record>
<record id="2">
<FileName>index2.jsp</FileName>
<FileID>2</FileID>
</record>
</out>'))


SELECT extract(po_file,'out/record/FileName').getStringVal() AS FileName,extract(po_file,'out/record/FileID').getStringVal() AS FileID FROM purchase_order

SELECT extract(po_file,'out/record/@id').getStringVal() AS RECORD FROM purchase_order


SELECT extract(po_file,'out/record/FileName').getStringVal() AS FileName FROM purchase_order


select extractValue(value(i),'/FileName') AS FileName 
from purchase_order x,
table(XMLSequence(extract(x.po_file,'out/record/FileName'))) i