【发布时间】:2019-09-13 17:48:08
【问题描述】:
我已经存储了返回 Varchar2 (32767) 的函数,我想在 IN 下的 select 语句中使用它但是当我在 IN 子句下的 Select 中使用它时出现错误。
SELECT * FROM testcustomers1 where no_of_bu1 in(select myMaxLenFunc('test') from dual);
它给了我错误
错误:- ORA-06502: PL/SQL: 数字或值错误: 字符串缓冲区太小
如果返回值小于 4k 则可以正常工作,但如果大于 4k 则会引发上述错误。
如果我使用 varchar2 表或 Varchar2 在存储函数中返回,请建议我如何在 select 中使用它的 IN 子句。
【问题讨论】:
-
no_of_bu1 的数据类型是什么??为什么不能直接使用:no_of_bu1=myMaxLenFunc('test')...?
-
no_of_bu1 的数据类型是 varchar2(16) 并且在存储的函数中打算根据我的要求返回 no_of_bu1 的逗号分隔值。
-
要么只取前 4000 个字符,要么使用
clob。 -
您使用的是哪个 Oracle 版本?如果您想处理高达 32k 的 varchar 值,您可以启用 extended strings
-
我可以使用 12g 和扩展数据类型但仍然 IN 不接受超过 4k