Подтвердить что ты не робот

Как проверить, содержит ли массив определенную строку?

У меня есть массив строк. Я хочу проверить, присутствует ли конкретная строка в массиве.

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, но это тоже не сработало.

Любые предложения?

4b9b3361

Ответ 1

Попробуйте member of условие:

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

Oracle представила несколько операторов набора для работы с коллекциями в 10g. Пожалуйста, прочитайте документацию, чтобы узнать больше.

Ответ 2

MEMBER OF можно использовать только с вложенными таблицами. Вы пытаетесь использовать его в ассоциативном массиве. Вы получите сообщение об ошибке "неверный номер или типы аргументов при вызове" MEMBER OF "".

Вот как это использовать:

    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;