我见过有关此错误的问题,但要么正在调用外部存储,要么尝试使用不兼容的类型或使用变量。所以我设置了一个非常简单的示例,但仍然无法使其工作。
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')...
但我还是觉得应该有更好的办法。
我试图说明如何将 MEMBER 函数与 NESTED TABLE TYPE 结合使用。它不能与关联数组一起使用。希望有帮助。
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;
MEMBER OF 只能与嵌套表一起使用。您正在尝试在关联数组上使用它。这是一个很好的差异解释。
MEMBER OF 告诉您表中某个值可用。是否有一个函数可以告诉您在哪个记录中找到了该值,以便您可以使用同一行或记录的关联值?