Few examples to extract xml data in a SQL query.
#1. Extract Master Child xml using xmltable
XMLTABLE
#2. EXTRACTVALUE
#4. To extract with the xml tag
#5. Prior to Oracle Database 10g Release 2 using xmlsequence
XMLSEQUENCE
Feel free to point out if anything is missing/wrong in this blog
#1. Extract Master Child xml using xmltable
XMLTABLE
select
header_row.department_id ,header_row.department_name ,child_row.employee_id ,child_row.first_name ,child_row.last_name
from
XMLTABLE
(
XMLNAMESPACES
(
default
'
http://johnytips.blogspot.com.au/ns/department
'
) ,'
/department
'
PASSING
xmltype
( '
<department xmlns="http://johnytips.blogspot.com.au/ns/department" id="1"> <department_name>Research</department_name> <employees> <employee id="1"> <first_name>ANOOP</first_name> <last_name>JOHNY</last_name> </employee> <employee id="2"> <first_name>ANISH</first_name> <last_name>JOHNY</last_name> </employee> </employees> </department>
')
COLUMNS
department_id
VARCHAR2
(30)
PATH
'
@id
'
, department_name
VARCHAR2
(10)
PATH
'
department_name
'
, child_rows
XMLTYPE
PATH
'
employees
'
) header_row ,
XMLTABLE
(
XMLNAMESPACES
(
default
'http://johnytips.blogspot.com.au/ns/department'
) ,'
/employees/employee'
PASSING
header_row.child_rows
COLUMNS
employee_id
NUMBER
PATH
'@id'
, first_name
VARCHAR2
(30)
PATH
'first_name'
, last_name
VARCHAR2
(30)
PATH
'last_name'
) child_row;
#2. EXTRACTVALUE
#3.EXTRACT
with
t
as
(
select
xmltype
(
'<employee> <employee_id>1</employee_id> <first_name>ANOOP</first_name> <last_name>JOHNY</last_name> </employee>'
) str
from
dual)
select
extractvalue
(str,
'/employee/employee_id'
) EMPLOYEE_ID ,
extractvalue
(str,
'/employee/first_name'
) FIRST_NAME ,
extractvalue
(str,
'/employee/last_name'
) LAST_NAME
from
t;
with
t
as
(
select
xmltype
(
'<employee> <employee_id>1</employee_id> <first_name>ANOOP</first_name> <last_name>JOHNY</last_name> </employee>'
) str
from
dual)
select
extract
(str,
'/employee/employee_id/text()'
) EMPLOYEE_ID ,
extract
(str,
'/employee/first_name/text()'
) FIRST_NAME ,
extract
(str,
'/employee/last_name/text()'
) LAST_NAME
from
t;
#4. To extract with the xml tag
with
t
as
(
select
xmltype
(
'<employee> <employee_id>1</employee_id> <first_name>ANOOP</first_name> <last_name>JOHNY</last_name> </employee>'
) str
from
dual)
select
extract
(str,
'/employee/employee_id'
) EMPLOYEE_ID ,
extract
(str,
'/employee/first_name'
) FIRST_NAME ,
extract
(str,
'/employee/last_name'
) LAST_NAME
from
t;
#5. Prior to Oracle Database 10g Release 2 using xmlsequence
XMLSEQUENCE
select
extractvalue
(
column_value
,
'/employee/first_name'
) "FIRST_NAME" ,
extractvalue
(
column_value
,
'/employee/last_name'
) "LAST_NAME"
from
table
(
xmlsequence
(
xmltype
(
'<employees> <employee> <employee_id>1</employee_id> <first_name>ANOOP</first_name> <last_name>JOHNY</last_name> </employee> <employee> <employee_id>2</employee_id> <first_name>ANISH</first_name> <last_name>JOHNY</last_name> </employee> </employees>'
).extract(
'/employees/employee'
)));
Feel free to point out if anything is missing/wrong in this blog
No comments:
Post a Comment