需要使用 Apache Camel 框架将数据(XML)存储到oracle DB中的 BLOB数据类型。 执行普通查询很好。但是当我试图将数据保存到BLOB时,oracle DB想要一个兼容的类型。 尝试将原始数据转换为BLOB兼容类型时,我尝试使用 utl_raw.cast_to_raw 。
这适用于较小的数据但是当数据很大时就像一个大的请求XML 超过2048个字符,错误 SQL错误:ORA-06502:PL / SQL:数字或值错误:抛出原始变量长度。
有人可以帮助让我知道如何使用Apache Camel将超过2048个字符的数据存储在BLOB数据类型中吗?
非常感谢任何帮助。
答案 0 :(得分:1)
这是一个在使用HSQLDB测试时运行良好的例子(我没有方便的Oracle数据库进行测试,但它的工作原理相同):
// This is just to have some relatively large ammount of data to insert in the BLOB, details don't matter
private static final byte[] LARGE_DATA.getBytes(StandardCharsets.UTF_8);
static {
final StringBuilder builder = new StringBuilder(10000);
for (int i = 0; i < 4000; i++) {
builder.append('a');
}
LARGE_STRING = builder.toString();
}
from("direct:clobTest")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader("myParam", LARGE_DATA);
}
})
.to("sql:INSERT INTO clob_table(clob_col) VALUES(:#myParam)");
或者,它也适用于输入流而不是字节数组:
final InputStream is = new ByteArrayInputStream(LARGE_DATA);
exchange.getIn().setHeader("myParam", is);