首页 > 解决方案 > ORA-01489 - 字符串连接的结果太长 - 附加大 Varchar 列

问题描述

我正在尝试附加 4 列数据类型,例如 varchar2(4000) || varchar2(4000) || varchar2(4000) || varchar2(100) 并尝试将其分配给表的 CLOB 数据类型列。

像下面这样的东西,

insert into test as select TO_CLOB (A || B || C  || D) as final from test_a;

表 1:测试

A CLOB;

表 2:Test_a

A varchar2(4000) 

B varchar2(4000) 

C varchar2(4000) 

C varchar2(100) 

我得到错误ORA-01489 Result of string concatenation is too long

我也尝试过像下面这样单独进行 CLOB 转换,但执行时间太长。

insert into test 
as select TO_CLOB (A )  || TO_CLOB (B ) || TO_CLOB (C ) || TO_CLOB (D ) ) as final from test_a;

请让我知道是否有其他方法可以做到这一点。

PS我正在使用Oracle 12c version

标签: oracleplsqlappendoracle12cclob

解决方案


当 || 的参数之一发生向 clob 的隐式转换 是一个 clob,所以请尝试以下操作:

原始查询:

select rpad('0', 4000, '0')||rpad('0', 4000, '0')||rpad('0', 4000, '0')||rpad('0', 4000, '0')||rpad('0', 100, '0') from dual
ORA-01489: result of string concatenation is too long

连接的第一个成员中的 TO_CLOB:

select TO_CLOB(rpad('0', 4000, '0'))||rpad('0', 4000, '0')||rpad('0', 4000, '0')||rpad('0', 4000, '0')||rpad('0', 100, '0') from dual
1 row(s) selected

推荐阅读