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
相关产品推荐
相关产品推荐

