1

我正在尝试将 XML 请求数据插入到 XML 消息大小超过 4KB 的表中,并且收到错误消息:'ORA-01461: can bind a LONG value only for insert into a LONG column'。我将 XML 请求数据作为事务的一部分作为字符串数据接收,并且由于使用的服务器(webMethods 集成服务器 9.0),我在将数据转换为另一种格式方面存在限制。我尝试了以下方法:

  • 插入测试表值(xmltype())
  • 插入测试表值(xmltype().getClobVal())
  • 插入测试表值(TO_CLOB())
  • 表模式如下所示:

    desc testtable
    Name    Null     Type      
    ------- -------- --------- 
    XMLDATA NOT NULL XMLTYPE() 
    

    对表的插入也应该在很短的时间内发生,因为对到达服务器的每个请求消息都执行了操作。请帮忙。

    4

    3 回答 3

    1

    这种“匿名 PL/SQL 块”方法可能有效,但我不确定,因为我没有自己的网络方法来测试它......

    代替

    insert into testtable
    values (xmltype(:1))
    

    尝试运行

    declare
        l_long          long;
        l_string        varchar2(32767);
    begin
        l_long := :1;
        l_string := l_long;
        insert into testtable values (xmltype(l_string));
    end;
    

    但是,处理大于 32767(甚至可能大于 4000)字符的 XML 文档可能会出现问题。

    于 2014-10-02T06:53:47.203 回答
    1

    我稍微修改了上面的代码,它现在可以工作了,但我不确定为什么:

    declare
        l_long          long;
        l_clob          clob;
    begin
        l_long := :1;
        l_clob := TO_CLOB(l_long);
        insert into testtable values (xmltype(l_clob));
        dbms_lob.freetemporary(l_clob);
    end;
    

    这也适用于 4KB 以上的 XML 类型数据。@nop77svk - 感谢您的指导。

    于 2014-10-02T10:23:52.153 回答
    0

    默认情况下,wM 中的所有内容都定义为字符串。但是在使用适配器连接时,您需要检查输入类型是什么。因此,对于在 DB 中定义为 Long 的字段,您需要从 wM 传递一个 long 对象,或者您需要将字段的输入类型设置为适配器服务中的字符串。您还需要检查数据库中定义的大小。如果您怀疑大小很大,则将 DB 中的字段类型设置为 CLOB。

    于 2014-11-01T20:37:34.720 回答