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

Oracle存储过程调用O_ITEM_TKT_REC_TAB报PLS-00306错误求助

问题排查与修复方案

错误根因

  • 类型匹配错误:O_item_tkt_rec_tab是O_item_tkt_tab对象的集合类型,它的构造函数只能接收O_item_tkt_tab实例作为参数,你直接将对象的三个属性值传入集合构造函数,参数类型/数量不匹配,因此触发PLS-00306报错。
  • 集合赋值逻辑错误:循环中直接给Out_Item_tab整体赋值,会覆盖上一轮循环的结果,最终只会保留最后一条处理结果,不符合批量处理的预期。

修复后的完整存储过程代码

CREATE OR REPLACE PROCEDURE item_tkt_tab(
    In_Item_tab      IN     I_item_tkt_rec_tab ,                                           
    Out_Item_tab     OUT    O_item_tkt_rec_tab  
)
IS
    L_Tkt_stat NUMBER; -- 调整为数字类型匹配游标查询结果
    L_Item  varchar2(25);
    L_ticket_type_id varchar2(4);

    CURSOR c_get_tkt_tab(L_Item varchar2,L_ticket_type_id varchar2)
    IS
        SELECT 1 from item_ticket
        where item =L_Item
        and ticket_type_id = L_ticket_type_id;

BEGIN
    -- 初始化空集合
    Out_Item_tab := O_item_tkt_rec_tab();

    FOR i IN 1 .. In_Item_tab.COUNT
    LOOP
        open c_get_tkt_tab(In_Item_tab(i).Item,In_Item_tab(i).ticket_type_id);
        FETCH c_get_tkt_tab into L_Tkt_stat;
        CLOSE c_get_tkt_tab;

        -- 集合扩容1位
        Out_Item_tab.EXTEND;
        if L_Tkt_stat is not null then
            -- 给集合最后一位赋值对象实例
            Out_Item_tab(Out_Item_tab.LAST) := O_item_tkt_tab(In_Item_tab(i).item,In_Item_tab(i).ticket_type_id,'XItemTicketCre') ;
        else
            Out_Item_tab(Out_Item_tab.LAST) := O_item_tkt_tab(In_Item_tab(i).item,In_Item_tab(i).ticket_type_id,'XItemTicketMod') ;
        end if;
    END LOOP;

EXCEPTION
    WHEN OTHERS
    THEN
        Out_Item_tab := NULL;   
END;
/

内容的提问来源于stack exchange,提问作者praveen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:48:01