将XMLTYPE列数据插入超过4KB的Oracle 11g数据库时出错

时间:2014-09-27 06:46:05

标签: oracle11gr2 xmltype webmethods

我正在尝试将XML请求数据插入到XML消息大小超过4KB的表中,并且我收到错误:'ORA-01461:只能插入LONG值才能插入LONG列”。我作为字符串数据接收XML请求数据作为事务的一部分,并且由于使用了服务器(webMethods Integration server 9.0),我将数据转换为另一种格式的限制。我尝试了以下方法:

  • 插入testtable值(xmltype())
  • 插入testtable值(xmltype()。getClobVal())
  • 插入测试表值(TO_CLOB())
  • 表模式如下:

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

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

    3 个答案:

    答案 0 :(得分:1)

    这个"匿名PL / SQL块" -approach可能有用,但我不确定,因为我没有自己的 webmethods 测试一下......

    而不是

    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文档可能存在问题。

    答案 1 :(得分: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 - 感谢您的指导。

    答案 2 :(得分:0)

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