将数据从表传输到 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 对象转换为数据框

Thymeleaf - 如何将对象(带有子对象)从表单发送回控制器

SQL Server 从表变量插入临时表

将一行从 SQL 数据映射到 Java 对象

从表对象中提取一行

从表视图中删除数据会使应用程序崩溃