create type address_in_type is object ( address varchar2(50) , city varchar2(50) , state varchar2(20) , zip5 varchar2(5) ) ; / create type address_out_type is object ( address varchar2(50) , city varchar2(50) , state varchar2(20) , zip5 varchar2(5) , zip4 varchar2(4) ) ; / create type addresses_in is table of address_in_type / create type addresses_out is table of address_out_type / create or replace package na_bulk is function invoke (p_address in addresses_in) return addresses_out ; end na_bulk ; / create or replace package body na_bulk is function invoke (p_address in addresses_in) return addresses_out is l_result number ; l_audit_id number ; cursor c_addresses_out is select address_out_type(street_address , city , state , zip5 , zip4 ) my_address from address_out_table ; l_addresses_out addresses_out ; begin execute immediate 'truncate table address_in_table' ; for i in 1..p_address.count loop insert into address_in_table ( street_address , city , state , zip5 ) values ( p_address(i).address , p_address(i).city , p_address(i).state , p_address(i).zip5 ) ; end loop ; commit ; run_owb_code( l_result , l_audit_id , 'RTR' , 'WS_TARGET_LOC' , 'PLSQL' , 'MAP_NA_BULK' ) ; open c_addresses_out ; fetch c_addresses_out bulk collect into l_addresses_out ; close c_addresses_out ; execute immediate 'alter session set current_schema = rt' ; return l_addresses_out ; end ; end na_bulk ; /