如何在PLSQL中使用MEMBER OF

时间:2017-02-01 19:51:44

标签: oracle plsql

我已经看到有关此错误的问题,但要么是调用外部存储,要么尝试使用不兼容的类型或使用varray。所以我设置了一个非常简单的例子,但仍然无法使其工作。

DECLARE 
TYPE mytype IS TABLE OF VARCHAR2(4) INDEX BY PLS_INTEGER;
mytable mytype;
BEGIN
  mytable((mytable.COUNT+1)) := 'COD1';
  mytable((mytable.COUNT+1)) := 'COD2';
  mytable((mytable.COUNT+1)) := 'COD3';
  mytable((mytable.COUNT+1)) := 'COD4';  
  --IF 'COD1' MEMBER OF mytable THEN DBMS_OUTPUT.PUT_LINE('We have the code'); END IF;
  FOR i IN 1..mytable.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(mytable(i));
  END LOOP;
END;

如果我运行它,我会得到这个:

COD1
COD2
COD3
COD4

如果我取消注释IF(我打算使用的),我会收到此错误。

PLS-00306: wrong number or types of arguments in call to MEMBER OF

也许我没有正确使用它或出现问题。

我试图在循环中使用它,我保存了我在“数组”中使用的代码,然后给出了一个我需要知道的代码,如果它已经被使用过了。 我的初始解决方案是附加到像“.COD1..COD2”这样的字符串。并做一个简单的INSTR,但似乎不对,我喜欢数组。 我听说过那个功能(成员),如果只是按照我认为的那样工作,那就做了我想做的事。

你能告诉我如何正确使用,我做错了什么或如何以更好的方式解决我的问题?

差不多...... 我将其更改为

-- Declare
TYPE mytype IS TABLE OF VARCHAR2(4) INDEX BY VARCHAR(4);
mytable mytype;
-- Fill
mytable('COD1') := 'COD1'; -- kind of redundant I only need the index
-- The magic
IF mytable.EXISTS('COD1')...

但我仍然认为应该有更好的方法。

2 个答案:

答案 0 :(得分:1)

MEMBER OF只能与嵌套表一起使用。您正试图在关联数组上使用它。这是一个很好的explanation of the differences

答案 1 :(得分:1)

我试图说明如何使用NESTED TABLE TYPE的MEMBER函数。它不能与Asociative数组一起使用。希望它有所帮助。

SET serveroutput ON;
DECLARE
type my_tab
IS
  TABLE OF VARCHAR2(100);
  tab my_tab;
BEGIN
  tab:=my_tab('AVRAJIT','SHUBHOJIT');
  IF 'AVRAJIT' member OF (tab) THEN
    dbms_output.put_line('Yes');
  ELSE
    dbms_output.put_line('No');
  END IF;
END;