PL / SQL как выбрать в табличной переменной типа локальной - PullRequest
7 голосов
/ 10 апреля 2011
PROCEDURE "ARCHIVE_CASE_LIST"
(
    a_case_id_list IN INLISTNUMBERS
)
IS
  l_customers INLISTNUMBERS;

INLISTNUMBERS - таблица чисел Oracle;

Как подготовить предварительно рассчитанный список клиентов и сохранить их в l_customers, чтобы мне не приходилось использовать этот длинный оператор выбора в другихобновить / выбрать заявления?

  insert into table(l_customers) <-- fail
    select distinct case1.customer_id into l_customers from case case1
      where case1.case_id in (select column_value from table(a_case_id_list)) and
        not exists (select 0 from case case2 where case2.customer_id = case1.customer_id and
          case2.lifecycle_code not in (code_id('LIFECYCLE','A'), code_id('LIFECYCLE','D')));

  update customer set customer.lifecycle_code = code_id('LIFECYCLE','A')
    where customer.customer_id in (select column_value from table(l_customers));

  open l_persons for 
    select person_id from person where person.customer_id in
      (select column_value from table(l_customers));

1 Ответ

11 голосов
/ 10 апреля 2011

Используйте оператор SELECT с BULK COLLECT :

select distinct case1.customer_id bulk collect into l_customers
from case case1
  where case1.case_id in (select column_value from table(a_case_id_list)) and
    not exists (select 0 from case case2 where case2.customer_id = case1.customer_id and
      case2.lifecycle_code not in (code_id('LIFECYCLE','A'), code_id('LIFECYCLE','D')));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...