Procedure Trigger

PostgreSQL

06/10/2008

Olá pessoal estou começando estudar postgres e gostaria quem puder, mostrar como seria esse caso:

[b:ebcafbe9f9]Tab Piloto[/b:ebcafbe9f9](Pilotos)
cod_piloto
nome
endereco
horas (Experiência do Piloto)


[b:ebcafbe9f9]TabRegVoo[/b:ebcafbe9f9](Registro de Vôo)
codpiloto
codvoo
horas


Nessa relaçao a cardinalidade é de 1:N

[b:ebcafbe9f9]O Problema?[/b:ebcafbe9f9]

Quando for registrado um vôo, um gatilho irá atualizar as horas do piloto [b:ebcafbe9f9]TabPiloto[/b:ebcafbe9f9] somando horas.registro de vôo + horas.piloto.

esse resultado seria as horas atualizadas do piloto que dever ser alterada no piloto correspondente na [b:ebcafbe9f9]TabPilotos[/b:ebcafbe9f9]

Alguem pode me ajudar??????? :roll:


Fslima

Fslima

Curtidas 0

Respostas

Fslima

Fslima

06/10/2008

:cry: Ninguém?????/


GOSTEI 0
Danilo Passos

Danilo Passos

06/10/2008

Seria algo assim:

-- Função chamada pela trigger
CREATE OR REPLACE FUNCTION trg_TabRegVoo_insert()
  RETURNS trigger AS
$BODY$
DECLARE
BEGIN
    update TabPiloto set horas = horas + new.horas where cod_piloto = new.codpiloto;
RETURN NEW;
END;
$BODY$
  LANGUAGE ´plpgsql´ VOLATILE;

-- Criação da trigger em si
CREATE TRIGGER trg_TabRegVoo_insert AFTER INSERT ON  TabRegVoo
    FOR EACH ROW EXECUTE PROCEDURE trg_TabRegVoo_insert();


Provavelmente, você deverá atentar para a soma de horas, vê se está somando corretamente.


GOSTEI 0
Fslima

Fslima

06/10/2008

ERRO: operador não existe: character + character
LINE 1: update pilotos set horas = horas + $1 where codpiloto = $...
^
HINT: Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.
QUERY: update pilotos set horas = horas + $1 where codpiloto = $2
CONTEXT: PL/pgSQL function ´trg_regvoo_insert´ line 3 at SQL statement

********** Erro **********

ERRO: operador não existe: character + character
SQL state: 42883
Dica: Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.
Contexto: PL/pgSQL function ´trg_regvoo_insert´ line 3 at SQL statement

Tá dando esses erros

o que seria?


GOSTEI 0
Danilo Passos

Danilo Passos

06/10/2008

Certifique-se que o campo horas é do tipo timestamp, e não char / varchar


GOSTEI 0
Fslima

Fslima

06/10/2008

Funcionou perfeitamente!!!!

:P

Obrigado


GOSTEI 0
POSTAR