TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Trabalho Sobre Trigger

Por:   •  23/6/2016  •  Trabalho acadêmico  •  472 Palavras (2 Páginas)  •  340 Visualizações

Página 1 de 2

A.Verificar se tr_sal_emp.SAL é inferior ou igual ao maior salário permitido para

um funcionário (emp.maxSal)

create or replace function verifica_salario() returns trigger as

$$

declare

_max_salario record;

_atual_salario record;

begin

select * into _max_salario from tr_emp where idemp=new.idemp;

select * into _atual_salario from tr_sal_emp where idemp=new.idemp;

if _atual_salario.sal >= _max_salario.max_sal THEN

RAISE EXCEPTION 'salario Atual nao pode ser maior que o limite';

end if;

return new;

end

$$language plpgsql

CREATE TRIGGER verifica_salario_tr after INSERT OR UPDATE ON tr_sal_emp

FOR EACH ROW EXECUTE PROCEDURE verifica_salario();

B.Não entendi o que vc quer :(

C.Se for uma inclusão com data de início posterior a dezembro de 2010 a data de

fim NÃO pode ser preenchida; Porém, se a data de início informada for inferior a

Janeiro de 2012 e o empregado possuir os códigos 10, 20 ou 30 então a data de

fim deverá ser igual a 31/12/2012.

CREATE OR REPLACE FUNCTION verifica_data_inicio()RETURNS trigger AS

$$

declare

_data_inicio tr_sal_emp%ROWTYPE;

BEGIN

SELECT * INTO _data_inicio FROM tr_sal_emp WHERE idemp=new.idemp;

IF _data_inicio.dtini > '20101231' THEN

UPDATE tr_sal_emp SET dtfim=null WHERE idsal_emp=new.idsal_emp;

RAISE NOTICE 'data fim é nulo ';

END IF;

IF _data_inicio.dtini < '20120101' and _data_inicio.idemp=10 or _data_inicio.idemp=20 or _data_inicio.idemp=30 THEN

UPDATE tr_sal_emp SET dtfim='20121231' WHERE idsal_emp=new.idsal_emp;

RAISE NOTICE 'data fim é 2012-12-31 ';

END IF;

RETURN new;

END;

$$

LANGUAGE plpgsql

CREATE TRIGGER verifica_data_inicio_tr AFTER INSERT ON tr_sal_emp

FOR EACH ROW EXECUTE PROCEDURE verifica_data_inicio();

D.Preencher automaticamente os campos (dependendo da operação):

–usu_inc / usu_atu := current_user

–dth_inc / dth_atu:= current_timestamp

CREATE OR REPLACE FUNCTION completa_user_insert() RETURNS trigger AS

$$

BEGIN

UPDATE tr_emp SET dth_inc=current_timestamp, usu_inc=current_user WHERE idemp=new.idemp;

RETURN new;

END;

$$LANGUAGE plpgsql

CREATE TRIGGER completa_user_insert_tr AFTER INSERT ON tr_emp

FOR EACH ROW EXECUTE PROCEDURE completa_user_insert();

CREATE OR REPLACE FUNCTION completa_user_update() RETURNS trigger AS

$$

BEGIN

DELETE FROM tr_emp WHERE idemp=old.idemp;

INSERT INTO tr_emp VALUES(old.idemp, new.nome, new.maxsal, new.dth_inc, new.usu_inc, current_timestamp, current_user );

RETURN null;

END;

$$LANGUAGE plpgsql

CREATE TRIGGER completa_user_update_tr after UPDATE ON tr_emp

FOR EACH ROW EXECUTE PROCEDURE completa_user_update();

E.Quando um funcionário receba aumento, ou seja, um novo registro é inserido na

tabela TR_SAL_EMP automaticamente um registro deve ser incluído na tabela

TR_PROMOVIDO (ou atualizado, se já existir).

CREATE OR REPLACE FUNCTION log_salario() RETURNS trigger AS

$$

DECLARE

_result record;

_sal_antigo decimal(9,2);

_sal_novo decimal(9,2);

BEGIN

select * into _result from tr_promovido WHERE anomes=old.idsal_emp;

_sal_antigo:=old.sal;

...

Baixar como (para membros premium)  txt (5 Kb)   pdf (66.3 Kb)   docx (12.5 Kb)  
Continuar por mais 1 página »
Disponível apenas no TrabalhosGratuitos.com