如何使用自定义同类型集合调用PL/SQL包内函数,调用报错如何解决?
问题解答
核心结论
你自行创建的集合类型无法直接调用包内函数接收返回值,这是Oracle PL/SQL的强类型校验规则导致的。
错误原因
PL/SQL对集合类型的匹配校验不仅会检查类型结构,还会校验类型的定义来源:
- 你在包
pk中定义的e_list是属于包作用域的独立公共类型 - 你在匿名块中自行定义的
p_list是属于当前匿名块作用域的局部类型
哪怕两者的定义完全一致(都是table of emp%rowtype index by pls_integer),Oracle也会判定为两个完全不兼容的类型,直接赋值必然会触发类型不匹配错误。
修正方案
不需要自行定义重复的集合类型,直接使用包中已公开的e_list类型声明变量即可,修正后的调用代码如下:
declare r_cur pk.e_list; -- 直接引用包内定义的集合类型 x number; begin r_cur:=pk.pro1; x:=r_cur.first; for i in 1..10 loop dbms_output.put_line(r_cur(x).salary); x:=r_cur.next(x); end loop; end; /
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

