【问题标题】:How do I properly use the MEMBER OF function in Oracle 11g如何在 Oracle 11g 中正确使用 MEMBER OF 函数
【发布时间】:2015-12-08 14:21:29
【问题描述】:

我有以下代码,每次执行它时,都会收到错误 PLS-00306:调用“成员”时参数的数量或类型错误。谁能告诉我我是如何错误地使用这个功能的?如果不是,那么正确的使用方法是什么?

如果我正确使用它,我还能如何检查数组的内容?

DECLARE
    TYPE type_cd IS VARRAY(12) OF CHAR(2);
    v_my_list  type_cd ;
    v_cd    CHAR(2) := 'AA';
BEGIN
    v_my_list   := type_cd (v_cd);

    IF v_cd MEMBER OF v_my_list
    THEN
        DBMS_OUTPUT.PUT_LINE(v_cd || ' is a member of v_my_list');
    ELSE
        DBMS_OUTPUT.PUT_LINE(v_cd || ' is NOT a member of v_my_list');
    END IF;
END;

【问题讨论】:

    标签: arrays oracle plsql oracle11g


    【解决方案1】:

    来自 Oracle 的 Support for Collection Datatypes 页面:

    MEMBER [OF]NOT MEMBER [OF] 条件测试元素是否是嵌套表的成员,并将结果作为布尔值返回。

    MEMBER 比较适用于嵌套表而不是 VARRAYs。

    VARRAY(12) 更改为TABLE 即可:

    DECLARE
        TYPE type_cd IS TABLE OF CHAR(2);
        v_my_list  type_cd ;
        v_cd    CHAR(2) := 'AA';
    BEGIN
        v_my_list   := type_cd (v_cd);
    
        IF v_cd MEMBER OF v_my_list
        THEN
            DBMS_OUTPUT.PUT_LINE(v_cd || ' is a member of v_my_list');
        ELSE
            DBMS_OUTPUT.PUT_LINE(v_cd || ' is NOT a member of v_my_list');
        END IF;
    END;
    

    编辑

    您可以使用一个简单的循环来检查VARRAY 中是否存在成员:

    DECLARE
        TYPE type_cd IS VARRAY(12) OF CHAR(2);
        v_my_list  type_cd ;
        v_cd    CHAR(2) := 'AA';
        v_found BOOLEAN := false;
        v_index INTEGER;
    BEGIN
        v_my_list   := type_cd (v_cd);
    
        v_index := v_my_list.FIRST;
        WHILE NOT v_found AND v_index IS NOT NULL LOOP
          IF v_my_list(v_index) = v_cd THEN
            v_found := true;
          ELSE
            v_index := v_my_list.NEXT( v_index );
          END IF;
        END LOOP;
        IF v_found THEN
            DBMS_OUTPUT.PUT_LINE(v_cd || ' is a member of v_my_list at ' || v_index );
        ELSE
            DBMS_OUTPUT.PUT_LINE(v_cd || ' is NOT a member of v_my_list');
        END IF;
    END;
    

    【讨论】:

    • 我应该知道 :) 有没有办法以类似的方式检查 VARRAY 的内容?
    • 好的,谢谢,有道理,我希望会有一个预定义的函数。显然循环遍历数组并搜索你的值会给你想要的结果。我只是想避免这种情况:)
    猜你喜欢
    • 2015-06-04
    • 1970-01-01
    • 2014-11-21
    • 2011-01-18
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    相关资源
    最近更新 更多