Gatilhos + Postgres

0 respostas
juniorsatanas

Pessoal eu quero fazer um gatilho que cadastre o nome do usuario que logou no sistema e a hora, até agora conseguir somente o usuário logado no banco, que como uso HIBERNATE, vai se o usuário da conexão quero o usuário da sessão..

-- Function: empregado_gatilho()

-- DROP FUNCTION empregado_gatilho();

CREATE OR REPLACE FUNCTION empregado_gatilho()
  RETURNS trigger AS
$BODY$
	BEGIN

	 --Verifica se foi fornecido o nome e o salario do empregado	

	 IF NEW.nome IS NULL THEN
		RAISE EXCEPTION 'O nome do empregado nao pode ser nulo';
	 END IF;
	 IF NEW.salario IS NULL THEN
		RAISE EXCEPTION '%O nao pode ter um salario nulo', NEW.nome;

         END IF;

         -- Quem paga para trabalhar

         IF NEW.salario < 0 THEN 
		RAISE EXCEPTION '% Nao pode ter um salario negativo', NEW.nome;
		
	 END IF;
	 

	 -- Registra quem apagou a folha de pagamento e quando

	 NEW.ultima_data := 'now';
	 NEW.ultimo_usuario := current_user;
	 RETURN NEW;
	 END;
	 
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION empregado_gatilho() OWNER TO root;

tabela:

-- Table: empregados

-- DROP TABLE empregados;

CREATE TABLE empregados
(
  codigo integer NOT NULL,
  nome character varying,
  salario integer,
  departamento_cod integer,
  ultima_data date,
  ultimo_usuario character varying,
  CONSTRAINT pk_epregados PRIMARY KEY (codigo)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE empregados OWNER TO root;

-- Trigger: empregado_gatilho on empregados

-- DROP TRIGGER empregado_gatilho ON empregados;

CREATE TRIGGER empregado_gatilho
  BEFORE INSERT OR UPDATE
  ON empregados
  FOR EACH ROW
  EXECUTE PROCEDURE empregado_gatilho();

resultado é :

3;"pedro";10;;"2010-07-20";"root"

Criado 20 de julho de 2010
Respostas 0
Participantes 1