Pessoal to fazendo um gatilho no postgres, e to pegando um erro louco.. segue código e erro :
-- deleta o campo sequence
-- DROP SEQUENCE idlcto;
-- cria o campo sequence
CREATE SEQUENCE teste.idlcto;
-- apaga e cria a tabela cliente
-- DROP TABLE cliente;
CREATE TABLE teste.cliente (
codcli smallint NOT NULL,
nome varchar(30) NOT NULL,
saldo numeric(10,2) NOT NULL DEFAULT 0.0,
CONSTRAINT pk_cliente PRIMARY KEY (codcli) );
-- apaga e cria a tabela lancamento
-- DROP TABLE lancamento;
CREATE TABLE teste.lancamento (
idlcto integer NOT NULL,
codcli smallint NOT NULL,
dtentrada date NOT NULL default now(),
valor numeric(10,2) NOT NULL DEFAULT 0.0,
historico varchar(100) NOT NULL,
CONSTRAINT pk_lancamento PRIMARY KEY (idlcto) );
-- cria e/ou recria a funcao do tipo TRIGGER
CREATE OR REPLACE FUNCTION teste.atualiza_saldo() RETURNS trigger AS
$BODY$
DECLARE
percentual numeric(10,2);
BEGIN
percentual := 10;
NEW.valor := NEW.valor + (NEW.valor * percentual * 0.01);
UPDATE cliente SET saldo = saldo + NEW.valor WHERE codcli = NEW.codcli;
NEW.historico := 'LCTO: ' || NEW.historico;
RETURN NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
-- cria a TRIGGER que utiliza a funcao criada acima
-- DROP TRIGGER tg_lancamento ON lancamento;
CREATE TRIGGER tg_lancamento
BEFORE INSERT ON teste.lancamento
FOR EACH ROW EXECUTE PROCEDURE teste.atualiza_saldo();
INSERT INTO teste.cliente (codcli,nome,saldo) VALUES (1,'JOAO DA SILVA',0);
INSERT INTO teste.cliente (codcli,nome,saldo) VALUES (2,'MARIA JOAQUINA DA SILVA',0);
INSERT INTO teste.cliente (codcli,nome,saldo) VALUES (3,'CARLOS ROBERTO SOUZA',0);
INSERT INTO teste.lancamento (idlcto,codcli,dtentrada,valor,historico) VALUES (NEXTVAL('idlcto'),1,now(),25.0,'LANCAMENTO VALOR POSITIVO');
INSERT INTO teste.lancamento (idlcto,codcli,dtentrada,valor,historico) VALUES (NEXTVAL('idlcto'),1,now(),-28.0,'LANCAMENTO VALOR NEGATIVO');
INSERT INTO teste.lancamento (teste.idlcto,codcli,dtentrada,valor,historico) VALUES (NEXTVAL('idlcto'),2,now(),-125.0,'LANCAMENTO VALOR POSITIVO');
INSERT INTO teste.lancamento (idlcto,codcli,dtentrada,valor,historico) VALUES (NEXTVAL('idlcto'),2,now(),265.0,'LANCAMENTO VALOR NEGATIVO');
SELECT * FROM teste.cliente;
SELECT * FROM teste.lancamento;
to pegando este erro:
NOTA: CREATE TABLE / PRIMARY KEY criará índice implícito "pk_cliente" na tabela "cliente"
NOTA: CREATE TABLE / PRIMARY KEY criará índice implícito "pk_lancamento" na tabela "lancamento"
ERRO: relação "idlcto" não existe
LINHA 53: ...ntrada,valor,historico) VALUES (NEXTVAL('idlcto'),...
^
********** Erro **********
ERRO: relação "idlcto" não existe
SQL state: 42P01
Caracter: 1685