В вашем коде много ошибок. Я пытался исправить эти ошибки. Вы можете попробовать следующий код -
CREATE TRIGGER check_rezervace
AFTER INSERT ON rezervuje
DECLARE
chyba INTEGER;
BEGIN
SELECT Count(*)
INTO chyba
FROM rezervuje
join objednavka ON objednavka.id_objednavky = rezervuje.objednavka_id_objednavky
WHERE ( objednavka.rezervace_od < rezervace_od
AND rezervace_od < objednavka.rezervace_do )
OR ( objednavka.rezervace_od < rezervace_od
AND rezervace_do < objednavka.rezervace_do )
OR ( rezervace_od <= objednavka.rezervace_od
AND objednavka.rezervace_do <= rezervace_do );
IF chyba > 0 THEN
Raise_application_error(-20001, 'rezervace již existuje');
END IF;
END;
Изначально у вас есть предложение INTO в ваших операторах JOIN, которое было неверным, также вы не можете запустить select в той же таблице, которая обновляется. это полностью изменит ошибку таблицы. Итак, я преобразовал ваш триггер в триггер после оператора.
Я не уверен, что этот триггер будет работать или нет, так как у нас нет образцов данных в таблицах rezervuje и objednavka. Для получения более подробной информации предоставьте образцы данных в этих таблицах.