我正在尝试将XML请求数据插入到XML消息大小超过4KB的表中,并且我收到错误:'ORA-01461:只能插入LONG值才能插入LONG列”。我作为字符串数据接收XML请求数据作为事务的一部分,并且由于使用了服务器(webMethods Integration server 9.0),我将数据转换为另一种格式的限制。我尝试了以下方法:
表模式如下:
desc testtable
Name Null Type
------- -------- ---------
XMLDATA NOT NULL XMLTYPE()
对表中的插入也应该在很短的时间内发生,因为对每个发送到服务器的请求消息执行操作。请帮忙。
答案 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。