我在以下代码中收到错误
create or replace package pkg
is
TYPE ARRAY_TAB1 is VARRAY(120) OF VARCHAR2(30);
ARRAY_TAB ARRAY_TAB1;
END;
/
show errors;
错误在程序参数的某处,我认为)
CREATE OR REPLACE PROCEDURE FILTER_DATA(NESTED_TAB IN OUT VARCHAR2,
ARR_TAB IN OUT pkg.ARRAY_TAB%TYPE)
IS
....
BEGIN
...
END;
CREATE OR REPLACE PROCEDURE MAIN_PROC
is
NESTED_TAB VARCHAR2(30);
TYPE ARRAY_TAB1 IS VARRAY(120) OF VARCHAR2(30);
pass_array ARRAY_TAB1;
.......
BEGIN
NESTED_TAB := 'BOOKING';
.......
pass_array := new ARRAY_TAB1('');
FILTER_DATA(NESTED_TAB,pass_array);
END;
/
EXEC MAIN_PROC()
I AM GETTING AN ERROR
让我变得更糟......如果有人知道解决方案
Warning: Procedure created with compilation errors.
Errors for PROCEDURE MAIN_PROC:
LINE/COL ERROR
-------- -----------------------------------------------------------------
11/4 PL/SQL: Statement ignored
11/4 PLS-00306: wrong number or types of arguments in call to
'FILTER_DATA'
BEGIN MAIN_PROC(); END;
*?
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00905: object SYS.MAIN_PROC is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
答案 0 :(得分:1)
您在main_proc
中声明的类型看起来相同,但是编译器的不与包中定义的类型相同,并在filter_data
的声明中使用。你必须使用完全相同的类型,而不是类似的类型。
如果您只是用包引用替换新定义,它应该可以工作:
CREATE OR REPLACE PROCEDURE MAIN_PROC
is
NESTED_TAB VARCHAR2(30);
pass_array pkg.ARRAY_TAB1;
...
BEGIN
NESTED_TAB := 'BOOKING';
.......
pass_array := new pkg.ARRAY_TAB1(null);
FILTER_DATA(NESTED_TAB,pass_array);
END;
/