我看到过一些这个错误的问题,但是要么是调用外部存储器,要么是尝试使用不兼容的类型或使用 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,但这似乎不太对,我更喜欢数组。 我听说过那个函数(member of),如果按照我所认为的方式工作,它就能实现我想要的功能。 你能告诉我如何正确使用它,我做错了什么,或者有更好的方法来解决我的问题吗? 快成功了... 我改成了。
-- 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')...
但我仍然觉得应该有更好的方法。