[firebase-br] RES: RES: Triggers - Nova duvida - 08/03/2022

Sandro Souza escovadordebits em gmail.com
Quinta Março 10 13:10:39 -03 2022


Bom dia/tarde/noite UPSAI.

Acho que o que você necessita é algo parecido com o "*%ROWTYPE*" do Oracle,
ou seja, poder declarar uma variável que seja um registro/linha completa de
uma tabela com todos os campos internamente.

Vamos supor que exista a seguinte tabela:

CREATE TABLE TESTE(
  CODIGO INTEGER NOT NULL,
  DESCRICAO VARCHAR(100) NOT NULL,
  CONSTRAINT PK_TESTE PRIMARY KEY(CODIGO),
  CONSTRAINT UK_TESTE_DESCRICAO UNIQUE(DESCRICAO)
);

Atualmente, podemos declarar variáveis utilizando o tipo de uma coluna já
existente de uma tabela já existente, ou seja, o equivalente ao "*%TYPE*"
do Oracle, que seria da seguinte forma:

No Oracle: DECLARE MEU_CODIGO TESTE.CODIGO%TYPE;

No Firebird: DECLARE VARIABLE MEU_CODIGO TYPE OF COLUMN TESTE.CODIGO;

Nos dois casos, irá declarar uma variável "MEU_CODIGO" do tipo INTEGER, que
é o tipo da coluna CODIGO da tabela TESTE.

Já no Oracle, podemos declarar uma variável que seja um registro/linha
completo de uma tabela, ou seja, uma variável que tenha todos os campos do
registro/linha internamente, que seria da seguinte forma:

No Oracle: DECLARE MEU_REGISTRO TESTE%ROWTYPE;

No Firebird: Não existe ainda. Poderia ser: DECLARE VARIABLE MEU_REGISTRO
TYPE OF TABLE TESTE;

Ou seja, pelo menos que eu saiba, ainda não temos esse recurso no Firebird.

No caso do Oracle, a variável MEU_REGISTRO teria todos os campos da tabela
TESTE dentro de si, e podemos acessá-los como MEU_REGISTRO.CODIGO e
MEU_REGISTRO.DESCRICAO, ou seja, na prática vira um RECORD do Delphi.

Confesso que não parei para ver as novidades do Firebird 3.0 e do 4.0,
devido à falta de tempo livre, mas tenho que ver isso logo, pois novos
recursos são sempre bem vindos.

Quem sabe, nas próximas versões, já exista isso?

Em qui., 10 de mar. de 2022 às 12:08, UPSAI | Informática via lista <
lista em firebase.com.br> escreveu:

> Prezado
>
> Talvez eu tenha falhado em escrever minha necessidade. Vou tentar utilizar
> um exemplo.
>
> Entendo que a New. seja um tipo de estrutura Record (como no Delphi/Pascal)
> onde eu tenha vários campos "pendurados" nela.
>
> Gostaria de definir uma nova estrutura (por exemplo como o nome Apoio) com
> o
> mesmo tipo e estrutura da New. (mesmos campos existentes na estrutura new.
> devem existir na Apoio.) para poder mover dados de uma estrutura para outra
> com uma como por exemplo      Apoio.campo1 = new.campo1;
>
> Será que é possível tecnicamente?
>
>
> Saudações,
>  Wagner Aranha
>
>
> -----Mensagem original-----
> De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Carlos H.
> Cantu
> via lista
> Enviada em: quinta-feira, 10 de março de 2022 10:37
> Para: lista em firebase.com.br
> Cc: Carlos H. Cantu <listas em warmboot.com.br>
> Assunto: Re: [firebase-br] RES: Triggers - Nova duvida - 08/03/2022
>
> Você não precisa copiar o conteudo novo pra uma variavel, pra poder inserir
> em outra tabela, como eu já exemplifiquei no email anterior. Mas se por
> algum motivo vc deseja jogar esse valor numa variável, basta declarar ela e
> atribuir o valor, ex:
>
> declare variable Var1 type of column tabela.campo1; ...
> Var1 = new.campo1;
>
> []s
> Carlos H. Cantu
> eBook Guia de Migração para o FB 4 - www.firebase.com.br/guiafb4.php
> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
>
> U|I> Grato
>
> U|I> Porem como eu devo fazer para copiar os dados que encontram-se na área
> chamada New.?
>
> U|I> Como posso criar uma variável do mesmo tipo do New. e como copiar o
> conteúdo de New para esta nova estrutura?
>
> U|I> Saudações,
> U|I>  Wagner Aranha
> U|I> Tel (11)2606-4100
>
>
>
> U|I> -----Mensagem original-----
> U|I> De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Carlos
> U|I> H. Cantu via lista Enviada em: terça-feira, 8 de março de 2022
> U|I> 12:18
> U|I> Para: FireBase <lista em firebase.com.br>
> U|I> Cc: Carlos H. Cantu <listas em warmboot.com.br>
> U|I> Assunto: Re: [firebase-br] Triggers - Nova duvida - 08/03/2022
>
> U|I> Basta referenciar com new.campo1 (onde campo1 é o nome do campo que vc
> quer pegar o valor novo).
>
> U|I> ex: insert algumatabela (campoA) values (new.campo1);
>
> U|I> []s
> U|I> Carlos H. Cantu
> U|I> eBook Guia de Migração para o FB 4 -
> U|I> www.firebase.com.br/guiafb4.php www.FireBase.com.br -
> U|I> www.firebirdnews.org - blog.firebase.com.br
>
> U|Ivl>> Prezados
>
> U|Ivl>> Em uma trigger onde o registro new. está inicializado, como
> utilizar
> este mesmo new. para fazer um insert adicional?
>
> U|Ivl>> Saudações,
> U|Ivl>>  Wagner Aranha
>
>
> U|I> ______________________________________________
> U|I> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> U|I> Para saber como gerenciar/excluir seu cadastro na lista, use:
> U|I> http://www.firebase.com.br/fb/artigo.php?id=1107
> U|I> Para consultar mensagens antigas:
> U|I> http://www.firebase.com.br/pesquisa_lista.html
>
>
> ______________________________________________
> 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
>
>
> ______________________________________________
> 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