![](/img/trans.png)
[英]dbms_xmlgen.getxmltype(context) returns null when the sql table is empty
[英]Reverse Oracle dbms_xmlgen.getxmltype() - ie can I SQL query an xmltype rowset to get back table results?
转换myTableWithManyColsAndRows-> myTableWithOneXmlTypeColumn如下:
declare
result xmltype;
begin
result := dbms_xmlgen.getxmltype('select * from myTableWithManyColsAndRows')
insert into table myTableWithOneXmlTypeColumn values result;
end;
我可以做相反的转换吗:myTableWithOneXmlTypeColumn-> myTableWithManyColsAndRows?
也就是说,我可以以某种方式构造一个查询myTableWithOneXmlTypeColumn并返回与“ select * from myTableWithManyColsAndRows”相同的结果的SQL语句吗?
--Creating a sample table with four columns and inserting random data.
create table myTableWithManyColsAndRows(
id_ number,
col1 varchar2(10),
col2 number,
col3 date
);
insert into myTableWithManyColsAndRows
select level, dbms_random.string('l', round(dbms_random.value(5,10))), round(dbms_random.value(1,100)),
to_date(round(dbms_random.value(2455928,2457024)),'J')
from dual
connect by level <= 7;
--Query to generate XML from the table.
select dbms_xmlgen.getxmltype('select * from myTableWithManyColsAndRows') from dual;
DBMS_XMLGEN.GETXMLTYPE('SELECT*FROMMYTABLEWITHMANYCOLSANDROWS')
-----------------------------------------------------------------
<ROWSET>
<ROW>
<ID_>1</ID_>
<COL1>ajfwmcaet</COL1>
<COL2>79</COL2>
<COL3>18-DEC-2013 00:00:00</COL3>
</ROW>
<ROW>
<ID_>2</ID_>
<COL1>wagvymnl</COL1>
<COL2>13</COL2>
<COL3>08-FEB-2012 00:00:00</COL3>
</ROW>
<ROW>
<ID_>3</ID_>
<COL1>jvlrv</COL1>
<COL2>45</COL2>
<COL3>28-DEC-2014 00:00:00</COL3>
</ROW>
<ROW>
<ID_>4</ID_>
<COL1>xirqutl</COL1>
<COL2>29</COL2>
<COL3>12-NOV-2012 00:00:00</COL3>
</ROW>
<ROW>
<ID_>5</ID_>
<COL1>rtdtmselx</COL1>
<COL2>75</COL2>
<COL3>26-JAN-2012 00:00:00</COL3>
</ROW>
<ROW>
<ID_>6</ID_>
<COL1>acvvw</COL1>
<COL2>70</COL2>
<COL3>19-SEP-2014 00:00:00</COL3>
</ROW>
<ROW>
<ID_>7</ID_>
<COL1>kbcmhh</COL1>
<COL2>62</COL2>
<COL3>26-MAY-2013 00:00:00</COL3>
</ROW>
</ROWSET>
要从XML获取行和列,您需要使用XMLTable 。 标签有多个标签。 因此,第一步是提取这些内容并映射到XMLType(xmlrow)。 从中,提取各个列。
with myTableWithOneXmlTypeColumn(xmlcol) as (
select dbms_xmlgen.getxmltype('select * from myTableWithManyColsAndRows') from dual
)
select cols.id_ id_, cols.col1 col1, cols.col2 col2, to_date(cols.col3,'dd-mon-yyyy hh24:mi:ss') col3
from myTableWithOneXmlTypeColumn x,
XMLTABLE('ROWSET'
PASSING x.xmlcol
COLUMNS xmlrow xmltype PATH 'ROW'
) xmlrows,
XMLTABLE('ROW'
PASSING xmlrows.xmlrow
COLUMNS id_ number PATH 'ID_',
col1 varchar2(10) PATH 'COL1',
col2 number PATH 'COL2',
col3 varchar2(20) PATH 'COL3'
) cols;
ID_ COL1 COL2 COL3
---------- ---------- ---------- --------------------------
1 ajfwmcaet 79 18-DEC-2013 00:00:00
2 wagvymnl 13 08-FEB-2012 00:00:00
3 jvlrv 45 28-DEC-2014 00:00:00
4 xirqutl 29 12-NOV-2012 00:00:00
5 rtdtmselx 75 26-JAN-2012 00:00:00
6 acvvw 70 19-SEP-2014 00:00:00
7 kbcmhh 62 26-MAY-2013 00:00:00
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.