我正在开发一个 kafka 连接,它使用 sql 请求从数据库获取信息。 这个sql请求就像一个
select
X,X,X,
JSON_ARRAYAGG(
JSON_OBJECT(
select X,X,X)).
我的问题似乎出在可能超过 18k 个字符的 JSON_ARRAYAGG 上。 在这种情况下,如果出现两行这样的行,则会抛出以下错误:
org.apache.kafka.connect.errors.DataException: java.sql?SQLException: ORA-22922: nonexistant LOB value at io.confluent.connect.jdbc.source.TimestampTableQuerier.doExtractRecord(TimestampTableQuerier.java:150) at ... Caused by: java;sql.SQLExeption: ORA-22922: nonexistant LOB value at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:509) at ...
我设法使用 DBeaver 获得了类似的结果,并且在一些帮助下,似乎取消选中“对 CLOB 值使用缓存”可以解决该工具上的问题。
但是,我无法在 jdbc 文档中找到是否有类似的参数可以添加到我的 kafka connect yaml 中来解决问题。
有谁知道Oracle jdbc是否存在这个参数?
我已经做了什么: 我设法减少了 sql 请求的返回值数量,以便隔离似乎一起生成问题的两个值。 我设法在 DBeaver 上重现这些值的错误(“复制内容时出现 IO 错误”),然后向我解释了 Dbeaver 的解决方案:取消选中“对 CLOB 值使用缓存”。
我尝试使用 blob 并要求 Kafka connect 将其转换为文本,但结果是相同的。
哪些数据库和 JDBC 版本?
ORA-22922 是在 Ask-Tom 论坛中提出的,其中包含一些与 JDBC 无关的建议。 你能检查一下吗 https://asktom.oracle.com/pls/apex/f?p=100:11:::::P11_QUESTION_ID:9543118700346635079