You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 18c标量子查询取CLOB触发ORA-22922错误:是否为已知Bug及规避方案

Oracle 18c ORA-22922 错误解答

是否为已知Bug?

是的,这是Oracle数据库的已知Bug,存在于12cR2至19c版本(含18c)中,表现为嵌套子查询生成CLOB并配合CONNECT BY递归生成多行时,当返回行数超过一定阈值(通常是10行),就会触发ORA-22922: nonexistent LOB value错误。该问题已在Oracle 23ai中被修复。

规避方法

以下几种方案可解决该问题:

1. 移除嵌套子查询,直接生成CLOB

将嵌套子查询的逻辑合并到主查询中,让Oracle直接为每行生成独立的CLOB值:

SELECT to_clob('123412341234') x
FROM dual
CONNECT BY LEVEL <= 20;

2. 为子查询添加MATERIALIZE提示

如果业务需要保留子查询结构,可通过/*+ MATERIALIZE */提示强制Oracle先物化子查询结果,再关联到主查询的递归行:

SELECT (SELECT /*+ MATERIALIZE */ to_clob('123412341234') x FROM dual)
FROM dual
CONNECT BY LEVEL <= 20;

3. 用UNION ALL替代CONNECT BY生成多行(适合行数固定场景)

若需生成的行数固定且数量不多,可通过UNION ALL逐行拼接结果:

SELECT to_clob('123412341234') x FROM dual
UNION ALL SELECT to_clob('123412341234') x FROM dual
UNION ALL SELECT to_clob('123412341234') x FROM dual
-- 重复至目标行数

验证说明

上述方法在Oracle 18c的SQL*Plus及JDBC环境中均可正常执行,能正确返回所有行的CLOB值,不会触发ORA-22922错误。

内容的提问来源于stack exchange,提问作者Lukas Eder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:46:15