好东西,马上项目上就可能遇到,我以前一直用plsql解析xml:
比如:
WITH T AS
(SELECT XMLTYPE('
DM1INTO_FIX_LINE_ANS11800011123456781110111') C
FROM DUAL)
SELECT ID,A, B
FROM T,
XMLTABLE('/DBSET/ROW/COL' PASSING T.C COLUMNS
ID VARCHAR2(40) PATH '@COLID',
A VARCHAR2(40) PATH '@NAME',
B VARCHAR2(40) PATH '/') X;
with q as(select xmltype('<?xml version="1.0"?>
Po_2
Nance
2 Avocet Drive
3 Avocet Drive
Redwood Shores
CA
Po_3
Smith
5 West Drive
6 Avocet Drive
San Francisco
中国
') the_xml from dual)
select x.street1, x.street2, x.city, x.state
from q, --your table here
XMLTable(
'PO_LIST/PO/SHIPADDR' --note I have wrapped POs in a PO_LIST tag
passing q.the_xml --your clob here
columns
street1 varchar2(400) path 'STREET[1]',
street2 varchar2(400) path 'STREET[2]',
city varchar2(400) path 'CITY',
state varchar2(400) path 'STATE'
) x
with t as (
select xmltype('
PM1SelftestStatusCompletedPM1SelftestStatusCompletedPM1SelftestStatusCompletedPM1SelftestStatusCompleted')
c from dual
)
select X.DIRID, X.Device, X.Task,X.DataType, X.Value
from t,
XMLTable(
'/DBSET/ROW'
passing t.c
columns
DIRID varchar2(40) path 'COL[1]',
Device varchar2(40) path 'COL[2]',
Task varchar2(40) path 'COL[3]',
DataType varchar2(40) path 'COL[4]',
Value varchar2(40) path 'COL[5]'
) x;
with t as (
select '
PM1SelftestStatusCompleted'
c from dual
)
select
extractvalue(xmltype(c),'/DBSET/ROW/COL[1]') as DIRID ,
-- extractvalue(xmltype(c),'/DBSET/ROW/COL[1]/@NAME') ,
extractvalue(xmltype(c),'/DBSET/ROW/COL[2]') Device,
extractvalue(xmltype(c),'/DBSET/ROW/COL[3]') Task,
extractvalue(xmltype(c),'/DBSET/ROW/COL[4]') DataType,
extractvalue(xmltype(c),'/DBSET/ROW/COL[5]') Value
from t;
不知道json解析速度如何,理论上应该比xml快很多;
但是oracle没有自带的json解析,如果用这个第三方的,不知道功能是否强大,调用是否方便,效率高否;