我看到有這個錯誤的問題,但是要麼調用外部存儲或嘗試使用不兼容的類型或使用varray。所以我設置了一個非常簡單的例子,但仍然無法完成工作。如何在PLSQL中使用MEMBER OF
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')...
但我還是覺得應該有一個更好的辦法。
哦,我看到了謝謝,你碰巧知道我怎麼能找到一個在聯合陣列中的元素,對於我的生活,我試着用google搜索一切都沒有成功。 –
你已經在上面的編輯中完成了。使用mytable.EXISTS。也許你應該用「更好的方式」來定義你的意思。 – DCookie
我的意思是我理解數組是這樣array [index] = value,所以「更好的方法」是找到「值」而不是「索引」,目的不應該存儲該值本身。我可能是錯誤的,如果它工作... –