2014-07-25 99 views
-2

,我在下面的代码得到一个错误类型不匹配过程的参数

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 
+0

[PLS-00306:错号码或类型的呼叫参数“OUTPUT \ _array”]的可能重复(HTTP: //sackoverflow.com/.com/ issues/22759571/pls-00306-wrong-number-or-types-of-arguments-in-call-to-output-array) – user272735

回答

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; 
/
+0

非常感谢@Alex Poole。它完成了... – Bit