2014-11-02 45 views
0

我想搜索一个大写字母数组,以查看数组中是否有字母。但我得到的错误:Error(7,27): PLS-00330: invalid use of type name or subtype name,但我似乎无法解决它。Pl sql Oracle类型名称或子类型名称的使用无效

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; 

回答

2

你已经宣布。要使用它,你需要声明一个该类型的变量。

" i now get the error Error(7,6): PLS-00306: wrong number or types of arguments in call to 'MEMBER OF'"

这是因为您正在使用VARRAY。 documentation advises us“没有比较变量的机制。”所以你应该使用嵌套表。使用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; 
+1

嘿感谢您的答复,但我现在得到的错误错误(7,6):PLS-00306:错号码或类型的调用“成员的” – 2014-11-02 09:13:38

+0

感谢参数,并感谢您的解释。 – 2014-11-02 11:13:03

相关问题