[firebase-br] RES: RES: "update or insert" - FB 2.1

Denis da Silva Guerra listas.denisguerra em gmail.com
Qua Jan 21 18:18:28 -03 2009


É... 
Uma procedure realmente resolveria o meu problema.

Mas como o IBExpert consegue esta informação?
Pois quando utilizo o "update or insert" pelo IBExpert, ele me trás a
quantidade de registros alterados e incluídos...
Será que o IBExpert usa alguma procedure oculta?
Senão, só pode ser o próprio Firebird que retorna esta informação, não é?

De qualquer forma, se o FB não dispor deste recurso, a procedure é realmente
uma boa solução.
Obrigado.

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 Daniel Sonda
Enviada em: quarta-feira, 21 de janeiro de 2009 16:46
Para: FireBase
Assunto: Re: [firebase-br] RES: "update or insert" - FB 2.1

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
>> ~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
>>
>>     

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista