Dúvida com Trigger
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!!!
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
Curtidas 0
Respostas
Emerson Nascimento
04/06/2010
publique a estrutura (script DDL) da tabela tbl_movimentacoes.
GOSTEI 0
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
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
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
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!!!
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