【问题标题】:How to insert large xmlType data from one table to another. ORA-19011: Character string buffer too small如何将大型 xmlType 数据从一个表插入到另一个表。 ORA-19011: 字符串缓冲区太小
【发布时间】:2021-02-04 07:25:43
【问题描述】:

我必须获取 XMLType 类型的数据,并将其插入到另一个数据库中,该数据库具有相同的表和相同的 XMLType 列。

  1. 我正在从这里读取数据
select id, to_clob("CONTACT") as CONTACTNAME1
from CONTACT_BINARY_TBL
  1. 将数据保存在
insert into COPY_CONTACT_BINARY_TBL (ID,CONTACTNAME)
values (#ID#,#CONTACTNAME1#)

结果:

java.sql.SQLException: ORA-19011: 字符串缓冲区太小。

因此,它适用于小型 XML,而不适用于大型 XML,因为 4K 是 vachar2 的限制。

那么如何插入大的 xmlType 值呢?

insert into contact_binary_tbl
values(1,XMLTYPE('....... ');

【问题讨论】:

  • 你的表的结构是什么?你写了XMLType,但ORA-19011 大约是varchar2。您是否通过 java 传输数据?在 fetch 上应该有 getClobgetCharacterStream 并为 insert 设置相同的值。
  • 你为什么要分两个阶段阅读和写作,你是如何持有/转换/翻译价值观的?如果您不能将insert ... select ... 作为一个操作执行,您至少可以将值保留为 CLOB(或 BLOB?)并使用绑定变量进行插入,而不是使用带引号的字符串文字构建插入?关于您的流程的详细信息不足,无法更具体。
  • 如果您不需要使用一些外部工具转换数据并且没有网络隔离,那么在两个系统之间传输数据的最快和最可靠的方式将是database link。跨度>

标签: sql oracle sql-insert xmltype


【解决方案1】:
I tried like below jar and it worked.

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>xdb</artifactId>
    <version>10.2.0.2.0</version>
</dependency>
----------------------------------------------------------
In extractor class:

else if(OracleTypes.OPAQUE == colType){
                        // get the XMLType 
                        OPAQUE opaquexml = (OPAQUE)rs.getObject(j + 1); 
                        XMLType xt = null;
                        if(null != opaquexml) {
                            xt = XMLType.createXML(opaquexml);
                            rowMap.put(colNames[j], xt);
                        }
}
--------------------------------------------------------------------
In loader: where you set values in prepStmt
 else if (value instanceof XMLType) {
            pStmt.setObject(j, (XMLType)value);
        }
--------------------------------------------------------------------
pStmt.execute.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2022-11-12
    • 2019-09-13
    • 1970-01-01
    • 2014-10-15
    相关资源
    最近更新 更多