Как объявить массив в PL/SQL, чтобы потом использовать в IN?

Добрый день. Предположим, есть запрос с условием IN (ниже простой пример). Могу ли я объявить коллекцию элементов ('IBM', 'Hewlett Packard', 'Microsoft') заранее в DECLARE как константу?

SELECT *
FROM customers
WHERE customer_name IN ('IBM', 'Hewlett Packard', 'Microsoft');
  • Вопрос задан
  • 346 просмотров
Решения вопроса 1
Да.
Вы можете написать свой утильный тип, например:
create or replace type string_tab as table of varchar2(4000 char)
/

Объявить константу на уровне метода, тела пакета или в спеки пакета
c_customers constant string_tab := string_tab('IBM', 'Hewlett Packard', 'Microsoft');

И использовать в select
-- Если константа пакетная, то <package_name>.c_customers
select *
from customers
where customer_name in (select column_value from table(c_customers));

альтернативный вариант, но со своими минусами :-)
select *
from customers
where customer_name member of c_customers;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы