insert into kk_st_deposit(deposit_id,client_name,dt,amount,active) values(1,'Карапетян',to_date('30.01.2011','dd.mm.yyyy'),123.89,'Y');
insert into kk_st_deposit(deposit_id,client_name,dt,amount,active) values(2,'Карапетян',to_date('12.06.2012','dd.mm.yyyy'),700000,'N');
insert into kk_st_deposit(deposit_id,client_name,dt,amount,active) values(3,'Саахов',to_date('24.09.2011','dd.mm.yyyy'),123123.91,'Y');
insert into kk_st_deposit(deposit_id,client_name,dt,amount,active) values(4,'Саахов',to_date('27.11.2011','dd.mm.yyyy'),90.98,'Y');
insert into kk_st_deposit(deposit_id,client_name,dt,amount,active) values(5,'Саахов',to_date('13.05.2010','dd.mm.yyyy'),100,'Y');
Расскажем немного об индексах.
Индексы служат для быстрого поиска в таблице по условию. Например, если требуется быстрый поиск в таблице по полям – серии и номеру паспорта, то имеет смысл создать составной индекс на эти два поля.
Индексы бывают неуникальными и уникальными. Уникальные индексы запрещают вставлять в проиндексированные наборы поле дублирующиеся значения (кроме NULL).
Кроме того, индексы бывают различных типов (по организации) NORMAL, BITMAP, FUNCTION-BASED и т.п.
Создадим требуемые индексы на наши таблицы, призванные облегчить поиск и update информации по ключу deposit_id:
create unique index ix_kk_deposit on kk_deposit (deposit_id);
create unique index ix_kk_st_deposit on kk_st_deposit (deposit_id);
Напишем требуемую процедуру:
create or replace procedure load_kk_st_deposit(inserts_count out integer,
deletes_count out integer,
updates_count out integer) is
begin
inserts_count := 0;
deletes_count := 0;
updates_count := 0;
for z in (select n.deposit_id new_deposit_id,
n.client_name new_client_name,
n.dt new_dt,
n.amount new_amount,
o.deposit_id old_deposit_id
from kk_deposit n
full outer join kk_st_deposit o
on n.deposit_id = o.deposit_id) loop
if z.old_deposit_id is null then
-- Если запись есть в KK_DEPOSIT, но нет в KK_ST_DEPOSIT, то вставить ее в KK_ST_DEPOSIT с признаком ACTIVE = 'Y'