[firebase-br] tabela temporaria

Denis denisrocha em hotmail.com
Qua Jan 17 08:21:05 -03 2007


Uma outra visão da coisa.......

Com o Firebird, vc pode criar select procedures. Ou Seja, a sua própria 
procedure é o resultado da tabela temporária. Isso significa que vc pode ir 
fazendo varias selects, cálculos, etc.... e ir retornando tudo. Neste caso 
nem precisa de tabela temporária.
Nos meus sistemas, tenho procedures, que "junta" dados de várias tabelas, 
faz um monte de calculos, e depois retorna como se fosse uma tabela. Um caso 
que tenho aqui por exemplo, é uma procedure que calcula a demanda de 
produtos, ou seja, ele calcula o que foi vendido, o que foi transferido para 
as filiais, o numero de devoluções, trocas etc... e depois vou dando suspend 
e retornando tudo.
Dê uma estudada melhor neste recurso do FB.

Denis


"Denilson Hauch" <denilsonhauch em gmail.com> 
escreveu na mensagem news:eogh6d$850$1 em sea.gmane.org...
> tenho uma sp que junta dados de duas tabelas e grava em uma terceira 
> tabela
>
> toda vez q a sp é executada limpo a tabela e gravo os dados das duas 
> tabelas
>
> qdo só um terminal executa funciona blza mas qdo + de um terminal tenta 
> executar da erro
>
>
> como faço para criar uma tabela temporaria? ou tem alguma outra forma de 
> se fazer isto sem tabela
>
>
>
> CREATE PROCEDURE "IMPORTA"
> (
>  "NOME_TEMP" VARCHAR(50)
> )
> RETURNS
> (
>  "OK" CHAR(1)
> )
> AS
> DECLARE VARIABLE CODIGO INTEGER;
> DECLARE VARIABLE I INTEGER;
> DECLARE VARIABLE DATA DATE;
> DECLARE VARIABLE MEDICO VARCHAR(50);
> DECLARE VARIABLE IDADE CHAR(3);
> DECLARE VARIABLE SEXO CHAR(1);
> DECLARE VARIABLE LAUDO BLOB;
> DECLARE VARIABLE EXAME VARCHAR(50);
> DECLARE VARIABLE NOME_NOVO VARCHAR(50);
> BEGIN
> I=0;
> DELETE FROM NOVO;
> FOR select COD_ANTIGO, DATA, MEDICO, IDADE, SEXO, LAUDO, EXAME, NOME FROM 
> ANTIGO
> WHERE NOME CONTAINING :NOME_TEMP
> into :CODIGO, :DATA, :MEDICO, :IDADE, :SEXO, :LAUDO, :EXAME, :NOME_NOVO
> DO
> BEGIN
> I= I + 1;
> INSERT INTO NOVO(COD_NOVO, DATA, MEDICO, IDADE, SEXO, LAUDO, EXAME, NOME, 
> CONTROLE, CONT)
> values(:CODIGO, :DATA, :MEDICO, :IDADE, :SEXO, :LAUDO, :EXAME, :NOME_NOVO, 
> 'A', :I);
> END
> FOR select ITENS_RECE.N_RECEP2,  ITENS_RECE.RESULTADO, ITENS_RECE.TITULO,
> RECEPCAO.DT_EXAME, PACIENTES.SEXO, PACIENTES.IDADE, PACIENTES.NOME_PAC, 
> MEDICOS.NOME_MEDICO
> FROM ITENS_RECE,  RECEPCAO, PACIENTES, MEDICOS
> WHERE NOME_PAC CONTAINING :NOME_TEMP AND ITENS_RECE.N_RECEP2 = 
> RECEPCAO.N_RECEP2
>      AND  RECEPCAO.COD_PAC = PACIENTES.COD_PAC AND RECEPCAO.CODIGO = 
> MEDICOS.CODIGO
> into :CODIGO, :LAUDO, :EXAME, :DATA, :SEXO, :IDADE, :NOME_NOVO, :MEDICO
> DO
> BEGIN
> I= I + 1;
> INSERT INTO NOVO(COD_NOVO, DATA, MEDICO, IDADE, SEXO, LAUDO, EXAME, 
> NOME,CONTROLE, CONT)
> values(:CODIGO, :DATA, :MEDICO, :IDADE, :SEXO, :LAUDO, :EXAME, 
> :NOME_NOVO,'N',:I);
> END
> SUSPEND;
> END
>
>
>
>
>


--------------------------------------------------------------------------------


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 







Mais detalhes sobre a lista de discussão lista