web-dev-qa-db-ja.com

配列に特定の文字列が含まれているかどうかを確認するにはどうすればよいですか?

文字列の配列があります。特定の文字列が配列に存在するかどうかを確認したいと思います。

DECLARE
  TYPE v_array IS TABLE OF VARCHAR2(200);
  ais_array v_array;
BEGIN
  ais_array := ('Lb1','Lb2','Lb3','Lb613');
  IF 'Lb1' IN ais_array THEN
     dbms_output.put_line('found');
  END IF;
END;

IN演算子が機能していません。型に対してselect *を実行してから、INを使用しようとしましたが、それも機能しませんでした。

助言がありますか?

11
user1394523

member of条件を試してください:

IF 'Lb1' member of ais_array THEN
  dbms_output.put_line('found');
END IF;

Oracleは、10gのコレクションを操作するためのいくつかの集合演算子を導入しました。 詳細についてはドキュメント をお読みください。

26

MEMBER OFは、ネストされたテーブルでのみ使用できます。連想配列で使用しようとしています。 「 'MEMBEROF'の呼び出しで引数の数またはタイプが間違っています」というエラーが発生します。

使用方法は次のとおりです。

    DECLARE  
   TYPE clientele IS TABLE OF VARCHAR2 (64);  

   client_list_12    clientele := clientele ('Customer 1', 'Customer 2');  
   client_list_13    clientele := clientele ('Customer 1', 'Customer 3');  

   client_list_133   clientele  
                   := clientele ('Customer 1', 'Customer 3', 'Customer 3');  

   client_list_empty clientele := clientele ();                          
BEGIN  
   IF 'Customer 1' MEMBER OF client_list_12  
   THEN  
      DBMS_OUTPUT.put_line ('Customer 1 is in the 12 list');  
   END IF;  

   IF 'Customer 2' NOT MEMBER OF client_list_13  
   THEN  
      DBMS_OUTPUT.put_line ('Customer 2 is not in the 13 list');  
   END IF;  

   DBMS_OUTPUT.put_line ('List 133 contains ' || CARDINALITY (client_list_133) || ' items');  

   IF client_list_empty IS EMPTY  
   THEN  
      DBMS_OUTPUT.put_line ('Client list is empty');  
   END IF;  

   IF client_list_133 IS NOT EMPTY  
   THEN  
      DBMS_OUTPUT.put_line ('Client list 133 is not empty');  
   END IF;  

END; 
0
dfortun