Dúvida com Trigger

Firebird

04/06/2010

Olá, pessoal!

Estou iniciando na programação em bancos de dados (view, trigger, stored procedure, etc) e surgiu uma dúvida que não estou conseguindo solucionar.

Estou tentando criar uma trigger de inserção no IBExpert, cujo script segue abaixo (sem o cabeçalho da trigger)

--Operação 5 é Operação de Bônus
AS
begin
    if (new.bonus = 40) then
    begin
        if (new.saldo > 2000.00) then
        begin
            insert into tbl_movimentacoes(id_operacao, id_conta, data_movimentacao, valor)
            values(5, new.id_conta, current_timestamp, 500.00);

            .
            .
            .

        end
    end
end

A sintaxe está ok, mas quando clico em commit, aparece o seguinte erro:



Desconfio que seja devido aos campos em negrito, onde estou tentando inserir data e hora atuais do servidor.

Como posso fazer essa inserção de data/hora pelo banco de dados no caso do Firebird?

Por favor, me ajudem!

Desde já agradeço!!!
Filipe Silva

Filipe Silva

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

04/06/2010

publique a estrutura (script DDL) da tabela tbl_movimentacoes.
GOSTEI 0
Tiago Melo

Tiago Melo

04/06/2010

realmente se vc utilizar os seguintes selects

select Current_Date from rdb$Database

select current_timestamp from rdb$database

verá que o primeiro retorna apenas data, já o seguinte retorna data e hora...tente
passar ao invéz de timestamp passar o Current_Date

qualquer coisa posta ai
GOSTEI 0
Tiago Melo

Tiago Melo

04/06/2010

esqueci de comentar que isso ocorre porque diferentemente de outros bancos de dados como oracle e sql server o firebird trabalha com os tipos separados para data e hora, então sendo assim vc tem mesmo que armazenar tanto data como horas em campos distintos...provavelmente o seu campo ai é DATE...e o current_timestamp esta tentando gravar a data e a hora em um campo onde é aceito somente data....
GOSTEI 0
Filipe Silva

Filipe Silva

04/06/2010

O campo data_movimentacao era do tipo timestamp e eu queria fazer uma inserção. Logo, os current_date e current_timestamp não estavam funcionando.

Para resolver o problema, fiz o comando insert da seguinte maneira, como me foi recomendado:

insert into tbl_movimentacoes(id_operacao, id_conta, data_movimentacao, valor)
values(5, new.id_conta, Cast('Now' as Timestamp) , 500.00);

Por meio desse comando, consegui inserir data e hora atuais em minha trigger.

Obrigado pela ajuda, pessoal!!!


GOSTEI 0
POSTAR