使用 Apache Camel Framework 将数据持久化为 Oracle DB 中的 BLOB / CLOB 数据类型

Persist data into BLOB / CLOB datatype in Oracle DB using Apache Camel Framework

需要使用 Apache Camel 框架将数据 (XML) 存储为 BLOB 数据类型。 执行正常查询没问题。但是当我试图将数据保存到 BLOB 中时,oracle DB 需要一个兼容的类型。 我在尝试将原始数据转换为 BLOB 兼容类型时尝试使用 utl_raw.cast_to_raw

这适用于较小的数据,但当数据很大时,如大型请求 XML 超过 2048 个字符,错误 SQL 错误:ORA-06502: PL/SQL: 数字或值错误:原始变量长度太长 被抛出。

有人可以帮助我知道如何使用 Apache Camel 将超过 2048 个字符的数据存储在 BLOB 数据类型中吗?

非常感谢任何帮助。

这是一个使用 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);