类型不匹配过程的参数
问题描述:
,我在下面的代码得到一个错误类型不匹配过程的参数
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
WHICH MAD ME ME MAD ..请问任何人都知道解决方案
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
答
你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;
/
+0
非常感谢@Alex Poole。它完成了... – Bit
[PLS-00306:错号码或类型的呼叫参数“OUTPUT \ _array”]的可能重复(HTTP: //sackoverflow.com/.com/ issues/22759571/pls-00306-wrong-number-or-types-of-arguments-in-call-to-output-array) – user272735