【发布时间】:2021-08-18 17:07:33
【问题描述】:
我对 oracle 存储过程中的一个要求感到震惊,我从 oracle 中的类型表中获取数据,该表有 2 列,现在我需要提取列并在存储过程 where 子句中使用它。
例如,我有一个类型数组 EData 有 2 列 ID 和 Name。
我可以通过以下方式使用它:
Select * from employees
where ID in (Select ID from table(EData))
但由于一些限制,我将其存储在一个变量中并使用 Execute Immediate 执行
当我将代码组合为字符串时,出现错误无法使用字符串连接使用类型表。
Query := 'Select ID from employees
where ID in (Select ID from' ||' table(EData))'
稍后我将执行如下:
Execute Immediate Query into var_ID;
以上方法无效,不知道如何克服。
试了几天,不胜感激。
【问题讨论】:
-
为什么不声明一个集合来存储表(Edata)中的所有ID?然后您可以稍后将查询中的所有 id 连接起来。
-
因为
execute immediate不知道EData是什么:execute immediate 有自己的执行上下文,除非您通过绑定显式传递变量,否则它与调用者是隔离的。
标签: arrays oracle concatenation