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

调用含数组参数的PL/SQL存储过程触发PLS-00306错误求助

解决PLS-00306:调用TEST_PROC时参数数量或类型错误

问题概述

已成功编译TEST_PKG包的规范和体,但执行TEST_PROC存储过程时触发PLS-00306错误。该存储过程要求传入NUMBER类型的p_num_chef、自定义VARRAY数组类型chef_array的p_chef,以及两个OUT参数。当前调用时直接传入数组元素的单个值,未构造合法数组对象,导致参数数量与类型不匹配。

错误信息

ORA-06550: 第n行,第1列:
PLS-00306: 调用'TEST_PROC'时参数数量或类型错误

解决方案

需要先声明chef_type记录变量,构造chef_array数组对象后再传入存储过程。修正后的执行代码如下:

-- 修正后的存储过程调用代码
DECLARE
    v_erreur        NUMBER := 0;
    v_message       VARCHAR2(256) := '';
    -- 声明包内定义的记录类型变量
    v_chef1         TEST_PKG.chef_type;
    v_chef2         TEST_PKG.chef_type;
    -- 声明包内定义的数组类型变量
    v_chef_array    TEST_PKG.chef_array;
BEGIN
    -- 给第一个记录对象赋值
    v_chef1.p_var1 := 'ABC';
    v_chef1.p_date := '20241120';
    -- 给第二个记录对象赋值
    v_chef2.p_var1 := 'DEF';
    v_chef2.p_date := '20241120';
    -- 初始化数组并添加记录元素
    v_chef_array := TEST_PKG.chef_array(v_chef1, v_chef2);
    
    -- 调用存储过程,传入构造完成的数组
    TEST_PKG.TEST_PROC(
        p_num_chef => 2,
        p_chef => v_chef_array,
        p_erreur => v_erreur,
        p_message => v_message
    );
    
    dbms_output.put_line('错误码: ' || v_erreur);
    dbms_output.put_line('错误信息: ' || v_message);
END;
/

关键说明

  • chef_array是包内自定义的VARRAY类型,必须先创建该类型的实例,再将chef_type记录元素添加到数组中,不能直接拆分元素单独传入。
  • 调用存储过程时,需严格匹配参数的数量、类型和模式(IN/OUT),确保与包定义的存储过程签名完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:07:04