【发布时间】:2010-12-09 21:36:53
【问题描述】:
我需要将函数签名更改为具有 CLOB 类型的参数 (p_param),之前的类型是 nvarchar2。当现有代码使用 || 时,这给我带来了麻烦连接。
这是现有的 sn-p,它对 NVarchar2 工作得很好,但显然当你使用 || 时连接 CLOB 时会将其视为 nvarchar2,当超出 nvarchar2 的字符限制时,这是一个问题。
execute immediate
'select p.person_id
from person p where p.id in (' || p_param || ')'
bulk collect into persons;
我试着把上面的sn-p改成
execute immediate
concat(concat('select p.id from person p where p.person_id in(',p_param),')')
bulk collect into members;
这不能编译,我得到一个错误,
PLS-00382:表达式类型错误
我是 PL/SQL 新手,感谢您的帮助。
【问题讨论】:
-
您是否正在构建一个人员列表,以至于它不适合 VARCHAR2 或 NVARCHAR2 变量?我不认为 Oracle 喜欢有那么长的 SQL。我会完全质疑这种方法。
-
是的,我完全同意你的看法。我正在维护一些代码,并希望避免重写整个代码。