在varray plsql中输入不匹配的过程参数

时间:2014-07-25 20:51:23

标签: sql oracle plsql oracle11g oracle10g

我在以下代码中收到错误

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

1 个答案:

答案 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;
/