Oracle XMLQuery
Version 20c

General Information
Library Note Morgan's Library Page Header
ACE Director Alum Daniel Morgan, founder of Morgan's Library, is scheduling complimentary technical Workshops on Database Security for the first 30 Oracle Database customers located anywhere in North America, EMEA, LATAM, or APAC that send an email to asra_us@oracle.com. Request a Workshop for your organization today.
Returns query results as XML. XMLTable returns results as relation data.
 
Demo Setup
Table DDL CREATE TABLE person_data (
person_id   NUMBER(3),
person_data XMLTYPE);
Demo Data INSERT INTO person_data
(person_id, person_data)
VALUES
(1, XMLTYPE('<PDRecord>
     <PDName>Daniel Morgan</PDName>
     <PDDOB>12/1/1951</PDDOB>
     <PDEmail>damorgan@u.washington.edu</PDEmail>
 </PDRecord>')
);

INSERT INTO person_data
(person_id, person_data)
VALUES
(2, XMLTYPE('<PDRecord>
     <PDName>Taner Poder</PDName>
     <PDDOB>5/17/1949</PDDOB>
     <PDEmail>damorgan@u.washington.edu</PDEmail>
   </PDRecord>')
);

INSERT INTO person_data
(person_id, person_data)
VALUES
(3, XMLTYPE('<PDRecord>
     <PDName>Caleb Small</PDName>
     <PDDOB>1/1/1960</PDDOB>
     <PDEmail>damorgan@u.washington.edu</PDEmail>
 </PDRecord>')
);

COMMIT;

col person_data format a50

SELECT * FROM person_data;

set long 100000

SELECT * FROM person_data;
 
SELECT
Simple Query (with equals) SELECT <column_list>, XMLQuery (
'for $i IN <record_end_tag>
 WHERE $i<item_end_tag> = <value>
 ORDER BY $i<item_end_tag>
 RETURN $i<item_end_tag>
PASSING BY VALUE <xml_record_column>
RETURNING CONTENTS) <returning_column_alias>
FROM <table_name>;


Note: What is within the parentheses is case sensitive and you can not use Upper Case or InitCap for commands.
SELECT person_id, XMLQuery('FOR $i IN /PDRecord
 WHERE $i /PDName = "Daniel Morgan"
 ORDER BY $i/PDName
 RETURN $i/PDName'
PASSING BY VALUE person_data
RETURNING CONTENT) XMLData
FROM person_data;

SELECT person_id, XMLQuery (
'FOR $i IN /PDRecord
 WHERE $i /PDName eq "Daniel Morgan"
 ORDER BY $i/PDName
 RETURN $i/PDName'
PASSING BY VALUE person_data
RETURNING CONTENT) XMLData
FROM person_data;
Greater Than SELECT person_id, XMLQuery (
'FOR $i IN /PDRecord
 WHERE $i /PDName > "Daniel Morgan"
 ORDER BY $i/PDName
 RETURN $i/PDName'
PASSING BY VALUE person_data
RETURNING CONTENT) XMLData
FROM person_data;

SELECT person_id, XMLQuery (
'FOR $i IN /PDRecord
 WHERE $i /PDName gt "Daniel Morgan"
 ORDER BY $i/PDName
 RETURN $i/PDName'
PASSING BY VALUE person_data
RETURNING CONTENT) XMLData
FROM person_data;
Greater Than Or Equal To SELECT person_id, XMLQuery (
'FOR $i IN /PDRecord
 WHERE $i /PDName >= "Daniel Morgan"
 ORDER BY $i/PDName
 RETURN $i/PDName'
PASSING BY VALUE person_data
RETURNING CONTENT) XMLData
FROM person_data;

SELECT person_id, XMLQuery (
'FOR $i IN /PDRecord
 WHERE $i /PDName ge "Daniel Morgan"
 ORDER BY $i/PDName
 RETURN $i/PDName'
PASSING BY VALUE person_data
RETURNING CONTENT) XMLData
FROM person_data;
Less Than SELECT person_id, XMLQuery (
'FOR $i IN /PDRecord
 WHERE $i /PDName < "Daniel Morgan"
 ORDER BY $i/PDName
 RETURN $i/PDName'
PASSING BY VALUE person_data
RETURNING CONTENT) XMLData
FROM person_data;

SELECT person_id, XMLQuery (
'FOR $i IN /PDRecord
 WHERE $i /PDName lt "Daniel Morgan"
 ORDER BY $i/PDName
 RETURN $i/PDName'
PASSING BY VALUE person_data
RETURNING CONTENT) XMLData
FROM person_data;
Less Than Or Equal To SELECT person_id, XMLQuery (
'FOR $i IN /PDRecord
 WHERE $i /PDName >= "Daniel Morgan"
 ORDER BY $i/PDName
 RETURN $i/PDName'
PASSING BY VALUE person_data
RETURNING CONTENT) XMLData
FROM person_data;

SELECT person_id, XMLQuery (
'FOR $i IN /PDRecord
 WHERE $i /PDName le "Daniel Morgan"
 ORDER BY $i/PDName
 RETURN $i/PDName'
PASSING BY VALUE person_data
RETURNING CONTENT) XMLData
FROM person_data;
Not Equals SELECT person_id, XMLQuery (
'FOR $i IN /PDRecord
 WHERE $i /PDName != "Daniel Morgan"
 ORDER BY $i/PDName
 RETURN $i/PDName'
PASSING BY VALUE person_data
RETURNING CONTENT) XMLData
FROM person_data;

SELECT person_id, XMLQuery (
'FOR $i IN /PDRecord
 WHERE $i /PDName ne "Daniel Morgan"
 ORDER BY $i/PDName
 RETURN $i/PDName'
PASSING BY VALUE person_data
RETURNING CONTENT) XMLData
FROM person_data;
Additional Syntax Elements
[ // div union <CastAs>
- >> * intersect <CastableAs>
+ and idiv <EOF>
| or mod <InstanceOf>
except is to <TreatAs>

Related Topics
DBMS_XMLGEN
XML Functions
XMLTable
XML Tables
What's New In 21c
What's New In 23c

Morgan's Library Page Footer
This site is maintained by Dan Morgan. Last Updated: This site is protected by copyright and trademark laws under U.S. and International law. © 1998-2023 Daniel A. Morgan All Rights Reserved
  DBSecWorx