Witam.
Potrzebuję pomocy w napisaniu triggera (lub jakiegos innego rozwiazania) w bazie Oracle 10g.
Mam dwie tabele:

SYGNATURA (
id_sygnatura NUMBER PRIMARY KEY,
id_ksiazka NUMBER,
sygnatura VARCHAR2(30),
dostepnosc CHAR(1 )
)

WYPOZYCZENIA (
id_wypozyczenia NUMBER PRIMARY KEY,
id_czytelnik NUMBER FOREIGN KEY,
id_sygnatura NUMBER FOREIGN KEY do tabeli SYGNATURA (id_sygnatura),
data_wypozyczenia DATE,
data_zwrotu DATE
)

Pierwszą tabelę SYGNATURA uzupełniam insertem gdzie ważne będzie pole dostepnosc, które przy pierwszym wpisaniu danych będzie zawierało literę 'T' (informacja, że dana książka jest dostępna). Później (przy wypożyczeniu książki) do tabeli WYPOZYCZENA wstawiane są dane gdzie id_sygnatura odpowiada id_sygnatura z tabeli SYGNATURY, a pole data_zwrotu zostaje puste, aż do momentu oddania książki. Przy wypożyczeniu mam triggera, który zamienia w tabeli SYGNATURY pole dostepnosc na literę 'N' (co oznacza, że książka jest niedostępna). Dalej przy oddawaniu książki do tabeli WYPOZYCZENIA jest wstawiana data do pola data_zwrotu i to oznacza, że dany czytelnik książkę oddał. I teraz w tym momencie potrzebuję triggera, który po update'cie na tabeli WYPOZYCZENIA (czyli wpisaniu tej daty_zwrotu) zamienił by przy odpowiedniej id_sygnaura pole dostepnosc na literę 'T', żeby książka była znów widoczna jako dostępna.
Wkleję triggera, który działa i zamienia mi przy wypożyczniu pole dostepnosc na 'N' w tabeli SYGNATURA:

create or replace TRIGGER UPDATE_AVAIL_SYGNATURA_N

AFTER insert on WYPOZYCZENIA

DECLARE

v_syg sygnatura.sygnatura%type;

BEGIN
SELECT id_sygnatura
INTO v_syg
FROM wypozyczenia
where id_wypozyczenia = (select max(id_wypozyczenia) from wypozyczenia);

UPDATE sygnatura set dostepnosc = 'N' where id_sygnatura = v_syg;

END UPDATE_AVAIL_SYGNATURA_N;

oraz triggera, który nie działa, ale własnie tak jakoś kombinowałem:

create or replace TRIGGER UPDATE_AVAIL_SYGNATURA_Y

AFTER update on WYPOZYCZENIA

DECLARE

v_syg sygnatura.sygnatura%type;

CURSOR wypozyczenia_cur IS

SELECT DISTINCT id_sygnatura
INTO v_syg
FROM wypozyczenia
where data_zwrotu is not null
and id_sygnatura in (select id_sygnatura from sygnatura where dostepnosc = 'N');

BEGIN
OPEN wypozyczenia_cur;
LOOP
FETCH wypozyczenia_cur INTO v_syg;
EXIT WHEN wypozyczenia_cur%NOTFOUND;
UPDATE sygnatura set dostepnosc = 'T' where id_sygnatura = v_syg;
END LOOP;

CLOSE wypozyczenia_cur;

END UPDATE_AVAIL_SYGNATURA_Y;

Niestety ten mój trigger nie działa za dobrze bo zamienia za dużo wierszy. Np. oddaję dwie książki, a trigger zamienia pole dostepnosc na 'T' w więcej wierszach niż w dwóch.
Jako podsumowanie problemu:
chodzi mi o to jak wydobyć id_sygnatury, które były dopiero update'owane w tabeli WYPOZYCZENIA??

Proszę o pomoc w rozwiązaniu tego problemu. Jeżeli są jakieś niejasności proszę pisać od razu odpowiem.