У меня проблема с реализацией некоторых триггеров в Oracle.
У меня есть два типа "t_movie" и "t_video", определенные как
CREATE TYPE t_movie AS OBJECT(
name VARCHAR(20),
year INTEGER);
И
CREATE TYPE t_video AS OBJECT(
type CHAR,
movie REF t_movie);
И у меня есть также связанные таблицы
CREATE TABLE movies OF t_movie
CREATE TABLE videos OF t_video
Если я удалю кортеж из таблицы фильмов, у меня будут другие кортежи в другой таблице со ссылками на объект, который больше не существует. Как я могу избежать этого? Я думал, что триггер необходим, но я понятия не имею, как его реализовать. Кто-нибудь может мне помочь?
Спасибо.
Edit:
Я попробовал триггер вот так:
CREATE or REPLACE TRIGGER delete_movie_cascade
before delete on movies
for each row
DECLARE
movie_ref (REF t_movie);
BEGIN
movie_ref = ref :old;
dbms_output.put_line(deref(movie_ref).name);
DELETE FROM videos WHERE movie = movie_ref;
END;
Но, как и ожидалось, я получаю ошибку
Error(6,13): PLS-00103: Encountered the symbol "(" when expecting one of the following:
constant exception <an identifier> <a double-quoted delimited-identifier> table long
double ref char time timestamp interval date binary national character nchar