2011-04-10 8 views
7
PROCEDURE "ARCHIVE_CASE_LIST" 
(
    a_case_id_list IN INLISTNUMBERS 
) 
IS 
    l_customers INLISTNUMBERS; 

INLISTNUMBERS es tabla de números de Oracle;PL/SQL ¿cómo se selecciona en el tipo de tabla variable local

¿Cómo preparo la lista precalculada de clientes y la almacena en l_customers, para que no tenga que usar esa larga declaración de selección en otras instrucciones de actualización/selección?

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

Respuesta

11

Utilice un declaración SELECT con granel Tomar:

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'))); 
Cuestiones relacionadas