Fórum Inserted e Deleted #39273

08/10/2003

0

Caros colegas, estou migrando de Sql Server para Firebird, e numa trigger minha encontrei um

Select * From Inserted
Where Not CodEmpr is null and
Not NrDocMovEstq is null


No firebird existe alguma tabela parecida tanto para INSERTED e DELETED ? Qual é esta tabela, ou comando?

OBrigado


Halexmaciel

Halexmaciel

Responder

Posts

08/10/2003

Afarias

não entendi a questão.


bom, só aproveitando... se está migrando para Interbase (ou Firebird) -- acho q seria um bom começo se vc desse uma lida nos manuais (ou parte deles) para conhecer a ferramenta q vai trabalhar.

Vc q veio do SQL Server verá q o IB é em parte bem menor (menos funções, etc) e muitas vezes diferente do SQL Server de forma q vc deverá conhecê-lo bem para poder ir na boa...


T+


Responder

Gostei + 0

08/10/2003

Halexmaciel

no Sql Server quando vc está inserindo, atualizando ou apagando um registro, se a tabela que está apagando possuir uma triggers, vc poderá verificar os dados da atual transação, como assim: Bem, vc tem no Sql Server duas Tabelas temporárias que não são visiveis para se trabalhar, as tabelas temporárias são: ´Inserted´ quando vc estiver alterando ou inserindo e ´Deleted´ quando vc estiver apagando registros de uma tabelas, essas duas tabelas são basicamente para pegar o estado do registro de uma determinada tabela: Como exemplo:

Eu tenho a tabela ´CLIENTE´ e dentro dessa tabela eu tenho uma trigger ´T_VerificaCliente´, esse trigger e resposável para verificar se existe já o cliente com o mesmo C.N.P.J., se existir ele envia uma mensagem, exemplo

Select * From Inserted Where CNPJ is Null

Já no Firebird eu não sei como funciona. Vcs podem me dizer como o Firebird trabalha com essas situações?

Obrigado


Responder

Gostei + 0

08/10/2003

Afarias

no Firebird não existe tais tabelas (inserted, etc...) -- mas vc pode checar qualquer tabela do banco dentro de uma trigger ou procedure.

dentro de uma trigger, vc pode checar os valored do campo sendo atualizado (inserido, modificado ou excluido) usando o NEW ou OLD, por exemplo::

create trigger tr_verifica_cpf for clientes before insert as
begin
if (exists(select 1 from clientes where cpf = NEW.cpf)) then
exception cpf_duplicado;
end^


o uso do NEW (NEW.cpf) indica q estou pegando o valor inserido no registro q disparou a trigger.

outro exemplo -- tenho uma tabela de produtos q quando alterado o preco, guardo a atualizacao do preco em uma tabela de histórico de preços::

create trigger tr_atualiza_preco for produtos after update as
begin
if (new.preco <> old.preco) then
insert into historico_precos (cod_produto, data, preco)
values (new.codigo, current_date, new.preco);
end^


note q uso::

if (new.preco <> old.preco) then

para identificar se houve atualização no campo preco.


blz?!
T+


Responder

Gostei + 0

26/03/2004

Oziasl

A minha intenção é seguinte, com a instrução abaixo. Testar se o AUT.id_contrato é igual o ID da tabela contrato com as condições na ((c.status = ´L´) or (c.status = ´T´)) and c.data_atu ´5/1/2003´))) se for dispara um insert para gravar na tabela teste_delete_arq os registros ID referente a tabela atu_contrato do intervalo acima citado.
Tabela teste_delete_arq possui CodTeste (Autoincremento) e CodAtu_contrato)

iF (Exists(select count(*) from atu_contrato AUT
where AUT.id_contrato in (select id from contratos c
where ((c.status = ´L´) or (c.status = ´T´)) and c.data_atu ´5/1/2003´)))) then
insert into teste_delete_arq (codatu_contrato) values (aut.id)

Se não fui legível por favor, tentarei explicar de outra forma. Obirago. Ozias


Responder

Gostei + 0

26/03/2004

Afarias

isto é uma trigger ou um procedimento?? poste o cabeçalho.


T+


Responder

Gostei + 0

26/03/2004

Oziasl

Recebi uma notição de mensagem no meio email, mas aconteçe que não fui em quem mandou a Mensagem referente ao tema. Ozias. Fuiiiiiiiiiiiiii :roll:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar