You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用自定义同类型集合调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:30:02