[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