【问题标题】:type mismatch procedure arguments in varray plsqlvarray plsql中的类型不匹配过程参数
【发布时间】:2014-07-25 20:51:23
【问题描述】:

我在以下代码中遇到错误

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

【问题讨论】:

标签: sql oracle plsql oracle11g oracle10g


【解决方案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;
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多