PL/SQL how do I select into table type local variable

11,140

Use a SELECT statement with 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')));
Share:
11,140
0xDEAD BEEF
Author by

0xDEAD BEEF

@ whiteCryption.

Updated on June 11, 2022

Comments

  • 0xDEAD BEEF
    0xDEAD BEEF almost 2 years
    PROCEDURE "ARCHIVE_CASE_LIST"
    (
        a_case_id_list IN INLISTNUMBERS
    )
    IS
      l_customers INLISTNUMBERS;
    

    INLISTNUMBERS is Oracle table of numbers;

    How do I prepare pre-calculated list of customers and store them in l_customers, so that I don't need to use that long select statement in other update/select statements?

      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));