This could be shown by the following ( postgres ):
Code:
CREATE TABLE test (
id serial Primary key,
name varchar(10)
);
CREATE TABLE refs (
rem_id int,
surname varchar(10),
CONSTRAINT refs_id FOREIGN KEY (rem_id) REFERENCES test (id) ON DELETE CASCADE);
CREATE FUNCTION plpgsql_call_handler() RETURNS OPAQUE AS '/usr/lib/pgsql/plpgsql.so' LANGUAGE 'C';
CREATE LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler LANCOMPILER 'PL/pgSQL';
CREATE FUNCTION before_cascade () RETURNS opaque AS '
DECLARE
row_deleting test%ROWTYPE;
row_referenced refs%ROWTYPE;
BEGIN
SELECT INTO row_deleting * from test WHERE id=OLD.id;
RAISE NOTICE ''Deleting %'', row_deleting.name;
FOR row_referenced IN SELECT * from refs WHERE rem_id=OLD.id LOOP
RAISE NOTICE ''Affects %'', row_referenced.surname;
END LOOP;
RETURN OLD;
END;'
language 'plpgsql';
CREATE TRIGGER show_me BEFORE DELETE ON test FOR EACH ROW EXECUTE PROCEDURE before_cascade();
Flawless
Bookmarks