我已经看到有关此错误的问题,但要么是调用外部存储,要么尝试使用不兼容的类型或使用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')...
但我仍然认为应该有更好的方法。
答案 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;