2017-02-01 53 views
0

我看到有這個錯誤的問題,但是要麼調用外部存儲或嘗試使用不兼容的類型或使用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')... 

但我還是覺得應該有一個更好的辦法。

回答

1

MEMBER OF只能與嵌套表一起使用。你正試圖在關聯數組上使用它。這是一個不錯的explanation of the differences

+0

哦,我看到了謝謝,你碰巧知道我怎麼能找到一個在聯合陣列中的元素,對於我的生活,我試着用google搜索一切都沒有成功。 –

+0

你已經在上面的編輯中完成了。使用mytable.EXISTS。也許你應該用「更好的方式」來定義你的意思。 – DCookie

+0

我的意思是我理解數組是這樣array [index] = value,所以「更好的方法」是找到「值」而不是「索引」,目的不應該存儲該值本身。我可能是錯誤的,如果它工作... –

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;