CREATE OR REPLACE FUNCTION removerCapitulo()
RETURNS trigger AS
$BODY$
declare counter int;
BEGIN
select count(*) into counter FROM capitulos where id_capitulo = NEW.id_livro;
if (counter >1)
THEN
DELETE FROM capitulos WHERE id_capitulo = NEW.id_livro;
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER removerCapitulo_trigger
BEFORE DELETE
ON livros
FOR EACH ROW
EXECUTE PROCEDURE removerCapitulo();
DELETE FROM public.livros
WHERE id_livro = 30
当我试图删除一个 "lvro "与id= id_capitulo我想删除 "lvro "和 "capitulo",但是当删除一个 "lvro "它返回成功,但它不删除 "lvro "或 "capitulo"... ... 我试图把一个计数器的情况下,有一个以上的 "capitulo "在表中的ID等于ID,我把当我要求删除它删除。
当我尝试删除一个id=id_capitulo的 "livro "时,我想删除 "livro "和 "capitulo"。
你不需要一个触发器。相反,你可以在外键中加入 on delete cascade
选项。
create table capitulos (
... -- other table columns
id_capitulo int
references livros(id_livro)
on delete cascade
);
至于你现有的代码: 因为你有一个。delete
触发器,你需要使用伪表态的 old
而非 new
实际上是空的)。
create or replace function remover_capitulo()
returns trigger as
$body$
begin
delete from capitulos where id_capitulo = old.id_livro;
return old;
end;
$body$
language plpgsql;
create trigger trg_remover_capitulo
before delete on livros
for each row
execute procedure remover_capitulo();