【问题标题】:Transfer data from table into XML object table将数据从表传输到 XML 对象表
【发布时间】: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>

我该怎么做?

【问题讨论】:

    标签: sql xml oracle plsql object-oriented-database


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      相关资源
      最近更新 更多