我正在 PGAdminIII 上创建一个触发器,我想在其中删除另一个表上具有外键的行。但是我遇到了语法错误,并且找不到问题所在:
CREATE TRIGGER clienteDelete
BEFORE DELETE ON cliente
FOR EACH ROW
BEGIN
DELETE FROM contacto WHERE contacto.id = OLD.contacto_idcontacto;
END;
ERROR: syntax error at or near "BEGIN"
LINE 4: BEGIN
^
********** Error **********
ERROR: syntax error at or near "BEGIN"
SQL state: 42601
Character: 68
我不习惯 Postgres 上触发器的语法,但这就是我根据 SQL 标准所知道的。任何帮助将不胜感激
所以Postgresql触发器有一些限制,例如
PostgreSQL 只允许执行用户定义的函数
触发的动作。
因此,要完成您想要的任务,您需要定义一个函数并使触发器触发该函数。像这样的东西应该有效:
CREATE FUNCTION clienteDelete() RETURNS TRIGGER AS $_$
BEGIN
DELETE FROM contacto WHERE contacto.id = OLD.contacto_idcontacto;
RETURN OLD;
END $_$ LANGUAGE 'plpgsql';
和触发器:
CREATE TRIGGER delete_contacto
BEFORE DELETE ON cliente
FOR EACH ROW
EXECUTE PROCEDURE clienteDelete();
我不是 Postgresql 专家,所以预计上面的代码并不完美。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)