Pl sql Oracle无效使用类型名称或子类型名称

时间:2014-11-02 08:57:51

标签: oracle collections plsql user-defined-types

我正在尝试搜索大写字母数组,以查看数组中是否有字母。但我收到错误:Error(7,27): PLS-00330: invalid use of type name or subtype name但我似乎无法修复它。

create or replace FUNCTION fun_ISUPPER(parCharAt IN VARCHAR2)
RETURN number IS
varCharAt VARCHAR2(1) := parCharAt;
TYPE upperCharArr IS VARRAY(4) OF VARCHAR2(1);
ARRAY upperCharArr := upperCharArr('A', 'B', 'C', 'D');  
BEGIN   
IF varCharAt MEMBER OF upperCharArr THEN
    RETURN 1;
ELSE
    RETURN 0;
END IF;
END;

1 个答案:

答案 0 :(得分:2)

您已声明类型。要使用它,您需要声明该类型的变量。

  

"我现在得到错误错误(7,6):PLS-00306:错误的数字或类型   致电'成员""

的论据

那是因为您正在使用VARRAY。 documentation advises us"没有比较varrays的机制。"所以你应该使用嵌套表。使用VARRAY的唯一原因是我们需要保留集合中元素的顺序;我不认为这适用于此。这是一个工作版本:

create or replace FUNCTION fun_ISUPPER(parCharAt IN VARCHAR2)
  RETURN number IS
  varCharAt VARCHAR2(1) := parCharAt;
  TYPE upperCharArr IS TABLE OF VARCHAR2(1);
  l_array upperCharArr := upperCharArr('A', 'B', 'C', 'D');  
BEGIN   
  IF varCharAt MEMBER OF l_array THEN
    RETURN 1;
  ELSE
    RETURN 0;
  END IF;
END;