Как проверить, содержит ли массив определенную строку?
У меня есть массив строк. Я хочу проверить, присутствует ли конкретная строка в массиве.
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
, но это тоже не сработало.
Любые предложения?
Ответы
Ответ 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;