【发布时间】:2013-09-24 18:26:01
【问题描述】:
我正在尝试在 IN 子句中将一组输入值用于我的过程,作为游标 where 子句的一部分。我知道以前有人问过这个问题,但是我还没有看到如何使我的语法正确编译。
在封装规范中,类型是
TYPE t_brth_dt IS TABLE OF sourceTable.stdt_brth_dt%TYPE INDEX BY PLS_INTEGER;
sourceTable.std_brth_dt 是表中的日期列。
我的光标的简化版在包体中是-
cursor DataCursor_Sort( p_brth_dt in t_brth_dt) is
SELECT *
FROM sourceTable
WHERE a.brth_dt IN (select column_value
from table(p_brth_dt))
当我尝试编译它时,我收到以下错误。
- [1]:(错误): PLS-00382: 表达式类型错误
- [2]:(错误):PL/SQL:ORA-22905:无法访问非嵌套表项中的行
我知道这看起来与其他问题相似,但我不明白语法错误是什么。
【问题讨论】:
-
尝试 p_brth_dt in (select sourceTable.std_brth_dt from t_brth_dt)
-
可悲的是(显然)企业级过程语言无法处理数组的简单概念。
-
使用 Clever Idea Widgetry 建议的流水线函数效果很好。我唯一需要添加的是一些代码来忽略异常 no_data_needed,因为我的程序抛出错误 ORA-06548。当 no_data_needed 然后为 null 时出现异常;