将数据从表传输到 XML 对象表
Posted
技术标签:
【中文标题】将数据从表传输到 XML 对象表【英文标题】:Transfer data from table into XML object table 【发布时间】:2015-11-18 02:40:04 【问题描述】:如果我有一张桌子:
create table thisTable (
column1 varchar(20),
column2 varchar(20),
column3 varchar(20)
);
我想将数据传输到 1 列 XML 表:
create table XMLTable (
data1 sys.xmltype
);
<column2>
<column1>..</column1>
<column2>..</column2>
<column3>..</column3>
</column2>
我该怎么做?
【问题讨论】:
【参考方案1】:INSERT INTO XMLTABLE
SELECT
XMLELEMENT(
"column2",
XMLELEMENT("column1", COLUMN1), XMLELEMENT("column2", COLUMN2), XMLELEMENT("column3", COLUMN3)
)
FROM
thisTable;
【讨论】:
这不起作用。我试过了,在 xmltable 中只有 XMLTYPE 作为输出。 因为结果是 XMLTYPE 而不是 VARCHAR2/CLOB;这取决于应用程序如何呈现。 SQL*Plus 显示 XML 文档。试试SELECT TO_CLOB(DATA1) FROM XMLTABLE
感谢@Husqvik。它运行良好。从我这边 +1【参考方案2】:
您可以使用以下步骤插入它。
declare
sourceTable varchar2(80) := 'THISTABLE';
destTable varchar2(80) := 'XMLTABLE';
destColumn varchar2(80) := 'data1';
TYPE cur_typ IS REF CURSOR;
c cur_typ;
colu varchar2(2000);
vsql varchar2(2000) := ' select ';
begin
for r in (select column_name from user_tab_columns where table_name = sourceTable order by column_id)
loop
vsql := vsql || ''' <' || r.column_name || '>'' || ' || r.column_name || ' || ''</' || r.column_name || '> '' || ' ;
end loop;
vsql := substr(vsql, 0 ,length(vsql)-4);
vsql := vsql ||' as x From ' || sourceTable;
open c for vsql ;
loop
FETCH c INTo colu;
EXIT WHEN c%NOTFOUND;
dbms_output.put_line(colu);
execute immediate ' insert into ' || destTable || ' values (xmltype(''<column2>' || colu || '</column2>'')) ';
end loop;
close c;
end;
【讨论】:
以上是关于将数据从表传输到 XML 对象表的主要内容,如果未能解决你的问题,请参考以下文章
在 Shiny 中将数据从 rhandsontable 对象转换为数据框