Już próbowałem chyba wszystkiego. Stworzyłem trigger, który ma wyświetlać powiadomienia w zależności od wyniku. Niestety do zmiennej FLAGA wartość nie jest nigdy wczytywana. Mój select zwraca albo nic (brak wyników), albo jeden wynik, czyli 1.
CREATE OR REPLACE TRIGGER TR_EGZEMPLARZ
BEFORE INSERT ON EGZEMPLARZ_FILMU
FOR EACH ROW
DECLARE
pragma autonomous_transaction;
FLAGA NUMBER DEFAULT 0;
IID NUMBER;
BEGIN
IID := :NEW.ID_EF;
SELECT COUNT(ID_EF) INTO FLAGA
FROM (
SELECT EF1.ID_EF FROM EGZEMPLARZ_FILMU EF1
WHERE EXISTS
(
SELECT EF2.ID_EF
FROM EGZEMPLARZ_FILMU EF2
WHERE EF1.ID_F = EF2.ID_F
AND EF1.ID_TW = EF2.ID_TW
AND EF1.ID_EF <> EF2.ID_EF
)
ORDER BY EF1.ID_EF
)
WHERE ID_EF = IID
GROUP BY ID_EF;
IF FLAGA > 0 THEN
dbms_output.put_line('Egzemplarz tego filmu na tym nośniku już istnieje' || IID );
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('Nie ma duplikacji egzemplarzy' || FLAGA ||' '|| IID);
END;