[firebase-br] Coluna identity

Sandro Souza escovadordebits em gmail.com
Ter Jul 30 16:27:36 -03 2019


Bom dia/tarde/noite Frederico.

Acredito que desde a versão 2.1 (quem sabe até antes disso) já existia a
cláusula RETURNING não só para o comando INSERT, mas também para o comando
UPDATE, justamente para te retornar os valores de uma ou mais
colunas/campos logo após executar o comando.

Vamos seguir o seu exemplo:

TABELA1(CODIGO INTEGER identity, NOME VARCHAR(30))
TABELA2(COD_TAB1 INTEGER, CAMPO2, CAMPO3)

INSERT INTO TABELA1(NOME)VALUES('TESTE')
INSERT INTO TABELA2(COD_TAB1,CAMPO2,CAMPO3)VALUES( ??? ,123,123 )

Você acrescentaria a cláusula RETURNING no final desses INSERTs, informando
as colunas/campos que deseja receber, e nesse caso, apesar de ser um
comando INSERT, ele se comportará como um comando SELECT no final, por
conta da cláusula RETURNING, ou seja, você executará esse INSERT com
RETURNING em uma consulta, ficando assim o código SQL de inserção e
consulta em um só comando:

Em uma consulta: INSERT INTO TABELA1(NOME)VALUES('TESTE')RETURNING CODIGO

Em outra consulta: INSERT INTO TABELA2(COD_TAB1,CAMPO2,CAMPO3)VALUES( ???
,123,123 )RETURNING COD_TAB1

Só relembrando, quando você acrescenta a cláusula RETURNING no fim de um
INSERT ou UPDATE, o comando será executado e, no final, irá se comportar
como um SELECT, retornando apenas um único registro (a não ser no caso do
comando UPDATE que pode afetar mais de um registro) com as colunas/campos
que você informou.

Isso é essencial quando, por exemplo, você necessita obter o valor da
coluna/campo chave que é gerado, por exemplo, por uma SEQUENCE/GENERATOR,
ou se a coluna/campo tiver o atributo itentity que já automatiza tudo isso.

Faça o teste.

Espero ter ajudado mais que atrapalhado. :D

Em ter, 30 de jul de 2019 às 15:30, Frederico Godoi <
frederico.godoi em gmail.com> escreveu:

> Boa tarde!
>
>   Alguém já está usando Firebird 3 com coluna do tipo identity ?
>   Sabem como posso fazer INSERT e obter imediatamente o resultado dessa
> coluna?
>
> TABELA1 ( CODIGO INTEGER  identity  , NOME VARCHAR (30 ) )
> TABELA2 (COD_TAB1 INTEGER, CAMPO2, CAMPO3 )
>
> INSERT INTO TABELA 1 ( NOME ) VALUES ( 'TESTE' )
> INSERT INTO TABELA 2 ( COD_TAB1, CAMPO2, CAMPO3 ) VALUES ( ??? , 123, 123 )
>
> Como saber o código que acabou de inserir ?
>
> Obrigado!
> --
> Frederico Godoi
> ______________________________________________
> 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://www.firebase.com.br/pesquisa_lista.html
>



Mais detalhes sobre a lista de discussão lista