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

Oracle中传递数组参数及代码编译报错(p_var未声明)修复

Oracle存储过程数组参数编译错误排查与修复

需在Oracle存储过程参数中传递数组类型数据,但编写的PACKAGE及PACKAGE BODY代码编译时报错,提示‘p_var必须声明’。以下是原代码:

CREATE OR REPLACE PACKAGE TEST_PKG 
IS
type rec_type is RECORD
(
    p_var1              varchar2(1),
    p_var2              varchar2(2)
);
    type rec_array is varray(50) of rec_type;

PROCEDURE TEST_PROC (
    p_proc1     IN VARCHAR2,
    p_proc2     IN VARCHAR2,
    p_var_type  IN rec_array      
);

END TEST_PKG;
/

CREATE OR REPLACE PACKAGE BODY SICMA."TEST_PKG" 
IS
   PROCEDURE TEST_PROC (
    p_proc1            IN VARCHAR2,
    p_proc2            IN VARCHAR2,
    p_var_type         IN rec_array      
   )
IS
v_nombre      NUMBER;
v_var1        VARCHAR2(2);
v_var2        VARCHAR2(2);

BEGIN
v_nombre := 2;
        FOR i IN 1 .. v_nombre
        LOOP
            v_var1   := p_var_type.p_var1(i);
            v_var2   := p_var_type.p_var2(i);
        END LOOP;            
        
        dbms_output.putline('v_var1' || v_var1);
        dbms_output.putline('v_var2' || v_var2);
   END TEST_PROC;
END TEST_PKG;
/         

错误原因

  • 数组中记录元素的访问逻辑错误:正确顺序应为先通过索引定位数组元素,再访问记录字段,即p_var_type(i).p_var1和p_var_type(i).p_var2
  • 系统过程调用拼写错误:dbms_output.putline需改为dbms_output.put_line(下划线不可省略)

修正后的PACKAGE BODY代码

CREATE OR REPLACE PACKAGE BODY SICMA."TEST_PKG" 
IS
   PROCEDURE TEST_PROC (
    p_proc1            IN VARCHAR2,
    p_proc2            IN VARCHAR2,
    p_var_type         IN rec_array      
   )
IS
v_nombre      NUMBER;
v_var1        VARCHAR2(2);
v_var2        VARCHAR2(2);

BEGIN
v_nombre := 2;
        FOR i IN 1 .. v_nombre
        LOOP
            v_var1   := p_var_type(i).p_var1;
            v_var2   := p_var_type(i).p_var2;
        END LOOP;            
        
        dbms_output.put_line('v_var1' || v_var1);
        dbms_output.put_line('v_var2' || v_var2);
   END TEST_PROC;
END TEST_PKG;
/         

内容的提问来源于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 18:32:04