Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

veronicaveronica

Trigger no Postgresql

Recommended Posts

Tenho uma tabela de empregados no postgresql com algumas informaçoes de empregados. Preciso fazer uma TRIGGER para quando DELETAR um empregado, NAO DELETAR quem é MANAGER e NAO DELETAR quem é UNICO empregado de um MANAGER.

Um MANAGER tem seu empno referenciado no campo mgr da tabela emp.
Entao, como fazer esta trigger? Fiz uma versao mas nao esta funcionando. Alguém me ajuda.

OBRIGADA!

CREATE TABLE emp
(
empno int4 NOT NULL,
ename varchar(30) NOT NULL,
job varchar(30) NOT NULL,
deptno int4 NOT NULL,
mgr int4,
);

ALTER TABLE emp
ADD CONSTRAINT "PKemp" PRIMARY KEY(empno);


----------------------------------------------
empno | ename | job | deptno | mgr |
-------+---------+-----------+--------+------+
7839 | KING | P | 10 | |
7698 | BLAKE | M | 30 | 7839 |
7900 | JAMES | CL | 30 | 7698 |
7990 | JOHNSON | S | 30 | 7698 |
7654 | MARTIN | S | 30 | 7698 |
7844 | TURNER | S | 30 | 7900 |


---------------------------------------------------------------------------------------------------------

CREATE or replace FUNCTION delete_emp()
RETURNS TRIGGER AS $$

BEGIN

IF (emp.empno ISNULL) THEN
RAISE NOTICE 'erreur: employeur n existe pas';

ELSE
select count(*) from emp t1, emp t2 where t2.mgr=t1.empno;
DELETE FROM emp WHERE emp.empno = OLD.empno;
RETURN OLD;
END IF;
END;
$$ language 'plpgsql';

DROP TRIGGER trigger_delete_emp ON emp;
CREATE TRIGGER trigger_delete_emp BEFORE DELETE ON emp FOR EACH ROW EXECUTE PROCEDURE delete_emp();


--------------------------------------------------------------------------------------------------------

 

OBRIGADA,

Compartilhar este post


Link para o post
Compartilhar em outros sites

A trigger tem de testar se na deleção o old.mgr é nulo

 

Ou

 

Se um select count(*) em que mgr =old.mgr é = 1

 

Forçar um erro nos dois casos

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.