SQL> conn jyang/jyang@athena
Connected.
SQL>
SQL> select * from XMLTAB1;
SYS_NC_ROWINFO$
--------------------------------------------------------------------------------
ADAMS-20011127121040988PST
SCOTT
2002-03-31
Julie P. Adams
ADAMS
R20
Julie P. Adams
Redwood Shores, CA 94065
650 506 7300
Ground
The Ruling Class
Diabolique
8 1/2
SQL>
SQL> -- The existsNode function
SQL> -- Existing nodes
SQL> SELECT existsNode(value(X),'/PurchaseOrder/Reference')
2 FROM XMLTAB1 X;
EXISTSNODE(VALUE(X),'/PURCHASEORDER/REFERENCE')
-----------------------------------------------
1
SQL>
SQL> SELECT existsNode(value(X),
2 '/PurchaseOrder[Reference="ADAMS-20011127121040988PST"]')
3 FROM XMLTAB1 X;
EXISTSNODE(VALUE(X),'/PURCHASEORDER[REFERENCE="ADAMS-20011127121040988PST"]')
-----------------------------------------------------------------------------
1
SQL>
SQL> SELECT existsNode(value(X),
2 '/PurchaseOrder/LineItems/LineItem[2]/Part[@Id="037429135020"]')
3 FROM XMLTAB1 X;
EXISTSNODE(VALUE(X),'/PURCHASEORDER/LINEITEMS/LINEITEM[2]/PART[@ID="037429135020
--------------------------------------------------------------------------------
1
SQL>
SQL> SELECT existsNode(value(X),
2 '/PurchaseOrder/LineItems/LineItem[Description="8 1/2"]')
3 FROM XMLTAB1 X;
EXISTSNODE(VALUE(X),'/PURCHASEORDER/LINEITEMS/LINEITEM[DESCRIPTION="81/2"]')
----------------------------------------------------------------------------
1
SQL>
SQL> -- Non-existing nodes
SQL> SELECT existsNode(value(X),'/PurchaseOrder/UserName')
2 FROM XMLTAB1 X;
EXISTSNODE(VALUE(X),'/PURCHASEORDER/USERNAME')
----------------------------------------------
0
SQL>
SQL> SELECT existsNode(value(X),
2 '/PurchaseOrder[Reference="ADAMS-XXXXXXXXXXXXXXXXXXXX"]')
3 FROM XMLTAB1 X;
EXISTSNODE(VALUE(X),'/PURCHASEORDER[REFERENCE="ADAMS-XXXXXXXXXXXXXXXXXXXX"]')
-----------------------------------------------------------------------------
0
SQL>
SQL> SELECT existsNode(value(X),
2 '/PurchaseOrder/LineItems/LineItem[3]/Part[@Id="037429135020"]')
3 FROM XMLTAB1 X;
EXISTSNODE(VALUE(X),'/PURCHASEORDER/LINEITEMS/LINEITEM[3]/PART[@ID="037429135020
--------------------------------------------------------------------------------
0
SQL>
SQL> SELECT existsNode(value(X),
2 '/PurchaseOrder/LineItems/LineItem[Description="Snow White"]')
3 FROM XMLTAB1 X;
EXISTSNODE(VALUE(X),'/PURCHASEORDER/LINEITEMS/LINEITEM[DESCRIPTION="SNOWWHITE"]'
--------------------------------------------------------------------------------
0
SQL>
SQL> -- The extractValue function
SQL> SELECT extractValue(value(x),'/PurchaseOrder/Reference')
2 FROM XMLTAB1 X;
EXTRACTVALUE(VALUE(X),'/PURCHASEORDER/REFERENCE')
--------------------------------------------------------------------------------
ADAMS-20011127121040988PST
SQL>
SQL> SELECT extractValue(value(x),
2 '/PurchaseOrder/LineItems/LineItem[2]/Part/@Id')
3 FROM XMLTAB1 X;
EXTRACTVALUE(VALUE(X),'/PURCHASEORDER/LINEITEMS/LINEITEM[2]/PART/@ID')
--------------------------------------------------------------------------------
037429135020
SQL>
SQL> SELECT extractValue(value(X),
2 '/PurchaseOrder/LineItems/LineItem/Description')
3 FROM XMLTAB1 X;
FROM XMLTAB1 X
*
ERROR at line 3:
ORA-19025: EXTRACTVALUE returns value of only one node
SQL>
SQL> SELECT extractValue(value(X),
2 '/PurchaseOrder/LineItems/LineItem[1]')
3 FROM XMLTAB1 X;
FROM XMLTAB1 X
*
ERROR at line 3:
ORA-19025: EXTRACTVALUE returns value of only one node
SQL>
SQL> -- Join XML table with other table
SQL> SELECT extractValue(value(x),'/PurchaseOrder/Reference')
2 FROM XMLTAB1 X, SCOTT.EMP
3 WHERE extractValue(value(x),'/PurchaseOrder/User') = EMP.ENAME
4 AND EMP.EMPNO = 7876;
EXTRACTVALUE(VALUE(X),'/PURCHASEORDER/REFERENCE')
--------------------------------------------------------------------------------
ADAMS-20011127121040988PST
SQL>
SQL> -- The extract method
SQL> -- Using extract() to Return an XML Fragment
SQL> SELECT extract(value(X),
2 '/PurchaseOrder/LineItems/LineItem/Description')
3 FROM XMLTAB1 X;
EXTRACT(VALUE(X),'/PURCHASEORDER/LINEITEMS/LINEITEM/DESCRIPTION')
--------------------------------------------------------------------------------
The Ruling Class
Diabolique
8 1/2
SQL>
SQL> -- Using extract() to Return a Node Tree that Matches an XPath Expression
SQL> SELECT extract(value(X),
2 '/PurchaseOrder/LineItems/LineItem[1]')
3 FROM XMLTAB1 X;
EXTRACT(VALUE(X),'/PURCHASEORDER/LINEITEMS/LINEITEM[1]')
--------------------------------------------------------------------------------
The Ruling Class
SQL>
SQL> -- The xmlsequence method
SQL> SELECT extractValue(value(t),'/Description')
2 FROM XMLTAB1 X,
3 TABLE ( xmlsequence (
4 extract(value(X),
5 '/PurchaseOrder/LineItems/LineItem/Description')
6 )
7 ) t;
EXTRACTVALUE(VALUE(T),'/DESCRIPTION')
--------------------------------------------------------------------------------
The Ruling Class
Diabolique
8 1/2
SQL>
SQL> spool off