Estou fazendo a matéria de banco de dados 2, e o professor passou um exemplo bem por cima de como criar trigger e porque usa-la, mas agora tentando criar sozinha para o trabalho, estou batendo cabeça com uma delas e gostaria de ajuda.
Tenho as tabelas cidade e estado, e quero que quando um estado não esteja sendo referenciado por nenhuma cidade o mesmo seja excluido, mas a única coisa que consegui seguindo o exemplo que o professor passou é apagar praticamente tudo que foi inserido, ficando apenas o estado que não foi referenciado na tabela cidades, ou seja, ao contrario do que eu queria que o mesmo fizesse.
Se puderem me ajudar
create table estado( id_estado integer primary key, nome varchar(20) ); create table cidade( id_cidade integer primary key, nome varchar(20), id_estado integer references estado (id_estado) ); insert into estado values(1, 'Santa Catarina'); insert into estado values(2, 'Parana'); insert into estado values(3, 'Rio Grande do Sul');
insert into cidade values(1, 'Vitor Meireles', 1); insert into cidade values(2, 'Curitiba', 2); insert into cidade values(3, 'Dona Emma');
create trigger verifica_sem_municipio before insert on cidade For Each Row execute procedure apaga_estado();
create function apaga_estado() returns opaque as ' declare cd_estado integer; begin cd_estado := new.id_estado; if not exists(select * from cidade where id_estado = cd_estado) then delete from estado where id_estado = null; raise notice ''Estado % foi apagado'',cd_estado; end if; return null; End; ' language 'plpgsql';
Pergunta
Josieli
Boa tarde
Estou fazendo a matéria de banco de dados 2, e o professor passou um exemplo bem por cima de como criar trigger e porque usa-la, mas agora tentando criar sozinha para o trabalho, estou batendo cabeça com uma delas e gostaria de ajuda.
Tenho as tabelas cidade e estado, e quero que quando um estado não esteja sendo referenciado por nenhuma cidade o mesmo seja excluido, mas a única coisa que consegui seguindo o exemplo que o professor passou é apagar praticamente tudo que foi inserido, ficando apenas o estado que não foi referenciado na tabela cidades, ou seja, ao contrario do que eu queria que o mesmo fizesse.
Se puderem me ajudar
create table estado(
id_estado integer primary key,
nome varchar(20)
);
create table cidade(
id_cidade integer primary key,
nome varchar(20),
id_estado integer references estado (id_estado)
);
insert into estado values(1, 'Santa Catarina');
insert into estado values(2, 'Parana');
insert into estado values(3, 'Rio Grande do Sul');
insert into cidade values(1, 'Vitor Meireles', 1);
insert into cidade values(2, 'Curitiba', 2);
insert into cidade values(3, 'Dona Emma');
create trigger verifica_sem_municipio
before insert on cidade
For Each Row
execute procedure apaga_estado();
create function apaga_estado() returns opaque as '
declare
cd_estado integer;
begin
cd_estado := new.id_estado;
if not exists(select * from cidade where id_estado = cd_estado)
then
delete from estado where id_estado = null;
raise notice ''Estado % foi apagado'',cd_estado;
end if;
return null;
End;
' language 'plpgsql';
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.