[firebase-br] RES: "update or insert" - FB 2.1
Daniel Sonda
daniel em mhnet.com.br
Qua Jan 21 16:46:17 -03 2009
Olá Denis,
Segundo o ReleaseNotes do Firebird 2.1 você pode usar a cláusula
RETURNING após o UPDATE OR INSERT:
UPDATE OR INSERT INTO EMPLOYEE (ID, NAME)
VALUES (:ID, :NAME)
RETURNING OLD.NAME;
Como só isso não resolve o problema, podemos criar uma stored procedure
para inclusão ou alteração dos registros de uma tabela, comparando o
valor anterior do campo da chave primária (OLD.ID). Se for null é porque
não existia e foi incluído, senão foi alterado.
CREATE OR ALTER PROCEDURE INCLUIR_ALTERAR_CLIENTE (
ID INTEGER,
NOME VARCHAR(20))
RETURNS (
RESULTADO VARCHAR(8) COLLATE WIN_PTBR)
AS
DECLARE VARIABLE OLD_ID INTEGER;
begin
/* Procedure Text */
UPDATE OR INSERT INTO CLIENTE
(ID, NOME)
VALUES (:ID, :NOME)
RETURNING OLD.ID
INTO :OLD_ID;
if (OLD_ID IS NULL) then
RESULTADO = 'Incluido';
else
RESULTADO = 'Alterado';
SUSPEND;
end^
Finalizando, podemos usar a stored procedure para incluir ou alterar,
retornando a ação que foi realizada:
SELECT RESULTADO FROM INCLUIR_ALTERAR_CLIENTE(1, 'Daniel Sonda')
Dessa maneira você precisa criar uma SP, mas fica num comando só como
você pediu.
Att.
Daniel Sonda
www.h2jsolucoes.com.br
Denis da Silva Guerra escreveu:
> Oi, Silvio
> Talvez eu não tenha me expressado bem...
> Na verdade eu preciso saber apenas se o registro:
> - Ou ele foi ATUALIZADO
> - Ou ele foi INSERIDO
>
> Será que a cláusula "UPDATE OR INSERT" dispõe de um retorno com essa
> informação?
> Eu preciso evitar uma outra sentença SQL porque o acesso é via internet...
>
>
> abs
> ~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
> Denis da Silva Guerra
> denisdsguerra em gmail.com
> São José do Vale do Rio Preto - RJ
> ~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
>
>
>
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
> nome de Silvio Clécio
> Enviada em: quarta-feira, 21 de janeiro de 2009 14:35
> Para: FireBase
> Assunto: Re: [firebase-br] "update or insert" - FB 2.1
>
> Olá pessoal,
>
> select * from tabela
>
> Aí é a forma mais simples, veja uma maneira de usar um "where" para filtrar
> os dados e carregar somente os que você irá visualizar/manipular.
>
> 2009/1/21 Denis da Silva Guerra <listas.denisguerra em gmail.com>
>
>
>> Pessoal,
>> Após usar o "update or insert" no FB 2.1, como faço para saber se o
>> registro
>> foi atualizado ou inserido?
>>
>>
>> abs
>> ~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
>> Denis da Silva Guerra
>> denisdsguerra em gmail.com
>> São José do Vale do Rio Preto - RJ
>> ~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
>>
>>
Mais detalhes sobre a lista de discussão lista