SQL múltiplos

luis em bmsoft.com.br luis em bmsoft.com.br
Dom Jun 14 14:37:21 -03 2009


Pessoal,

Mais uma...

Eu usava o DBisam... um "banco de dados" pequeno que aguenta bem as minhas 
tabelas...
Eu tenho muitos SQLs com 2 linhas de comando usando tabelas temporárias, e 
para fazer isso eu usava vários comandos SQL em uma mesma query separados 
por ponto e vírgula, que passava para o banco... para exemplificar...

Neste SQL eu pego todos os registros que estão em aberto no contas a receber 
antes de uma determinada data e coloco numa tabela temporária... depois eu 
pego todos os registros da tabela entre 2 datas (recebidos e em aberto) e 
coloco em outra tabela temporária... depois eu faço orders, etc.

Pergunta: Dá pra fazer algo parecido do Firebird??

Ai vai o SQL:

/* --- INICIO --- */
select
 a.doc_num,
 a.doc_serie,
 a.vencimento,
 b.nome,
 substring( cast( f.dados_adicionais as varchar(40)),1,40) programa,
 a.valor,
 c.data_recto,
 c.valor_recto,
 d.apelido banco,
 e.apelido corretor,
 a.status,
 extract(year from vencimento) ano,
 extract(month from vencimento) mes

into "memory\t1"
from dprprincipal a

left join clientesprincipal b on b.id = a.id_cliente
left outer join dprbaixas c on c.id_dp = a.id
left outer join bancos d on d.id = a.id_banco
left outer join vendedores e on e.id = a.id_vendedor
left outer join nfmestre f on f.id = a.id_nf
where (vencimento >= '2000-01-01') and (vencimento < '2009-06-01') and 
a.status='A'
order by vencimento
;
/* Formatar programa... */
update "memory\t1" set programa = substring(programa,pos('P=',programa),5)
;
update "memory\t1" set programa = '' where pos('P=',programa)=0
;

select
 a.doc_num,
 a.doc_serie,
 a.vencimento,
 b.nome,
 substring( cast( f.dados_adicionais as varchar(40)),1,40) programa,
 a.valor,
 c.data_recto,
 c.valor_recto,
 d.apelido banco,
 e.apelido corretor,
 a.status,
 extract(year from vencimento) ano,
 extract(month from vencimento) mes

into "memory\t2"
from dprprincipal a

left join clientesprincipal b on b.id = a.id_cliente
left outer join dprbaixas c on c.id_dp = a.id
left outer join bancos d on d.id = a.id_banco
left outer join vendedores e on e.id = a.id_vendedor
left outer join nfmestre f on f.id = a.id_nf
where (vencimento >= '2009-06-01') and (vencimento <= '2009-06-30')
order by vencimento
;
/* Formatar programa... */
update "memory\t1" set programa = substring(programa,pos('P=',programa),5)
;
update "memory\t1" set programa = '' where pos('P=',programa)=0
;

insert into "memory\t2" select * from "memory\t1" order by 
mes,ano,vencimento
;

select * from "memory\t2"

/* --- FIM --- */

-- 
_________________________________________
BMSOFT - SERVIÇOS DE INFORMÁTICA LTDA.
Luis C. de Azevedo
Analista de Sistemas
(47)8848-9722 







Mais detalhes sobre a lista de discussão lista