[firebase-br] Dúvidas de SQL no Firebird.
Magno System
magno em speet.com.br
Seg Jan 19 10:35:16 -03 2009
Esqueci de uma linha:
AUXDATA = DATAINICIAL;
WHILE (AUXDATA <= DATAFINAL) DO
BEGIN
SELECT COALESCE(SUM(VALOR), 0) FROM VENDAS WHERE DATA = :AUXDATA INTO
:VENDASDIA;
SELECT COALESCE(SUM(VALOR), 0) FROM GASTOS WHERE DATA = :AUXDATA INTO
:GASTOSDIA;
SUSPEND;
AUXDATA = AUXDATA + 1;
END
----- Original Message -----
From: "Magno System" <magno em speet.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Sunday, January 18, 2009 10:35 PM
Subject: Re: [firebase-br] Dúvidas de SQL no Firebird.
A STORED PROCEDURE SELECIONÁVEL ela retorna valores. Um exemplo rústico para
melhor entendimento:
DATAINICIAL e DATAFINA são declaradas como variáveis de entrada;
AUXDATA, VENDASDIA E GASTOSDIA são declaradas como variáveis de saída;
AUXDATA = DATAINICIAL;
WHILE (AUXDATA <= DATAFINAL) DO
BEGIN
SELECT COALESCE(SUM(VALOR), 0) FROM VENDAS WHERE DATA = :AUXDATA INTO
:VENDASDIA;
SELECT COALESCE(SUM(VALOR), 0) FROM GASTOS WHERE DATA = :AUXDATA INTO
:GASTOSDIA;
SUSPEND;
END
Aí você pode chamar a procedure assim:
SELECT AUXDATA, VENDASDIA, GASTOSDIA FROM PROC_VENDAEGASTOS(:DATAINICIAL,
:DATAFINAL);
Supondo que datainicial seja 01/01/2008 e datafinal 05/01/2008 você terá o
resultado assim, por exemplo:
AUXDATA VENDASDIA GASTOSDIA
01/01/2008 100,00 20,00
02/01/2008 200,00 98,00
03/01/2008 480,00 45,00
04/01/2008 320,00 62,00
05/01/2008 290,00 44,00
Cada SUSPEND executado dentro do loop é retornado uma linha. Portanto a
STORED PROCEDURE SELECIONÁVEL funciona como uma tabela virtual. Note que
você retornou cálculo executados em duas tabelas distintas através da STORED
PROCEDURE e ela retornou os valores como se fosse em uma tabela só.
Espero que tenha dado para clarear um pouco.
----- Original Message -----
From: "Coutinho - IG" <emanuel.coutinho em ig.com.br>
To: "Carlos H. Cantu" <listas em warmboot.com.br>; "FireBase"
<lista em firebase.com.br>
Sent: Sunday, January 18, 2009 4:53 PM
Subject: Re: [firebase-br] Dúvidas de SQL no Firebird.
É Parece que o Carlos entendeu mais ou menos o que necessito.
Na realidade, a funcionalidade de vc criar uma consulta, de pois outra
que acessa aquela, e outra que toraliza o resultado da segunda, no
access é uma mão na roda... e isso tudo acontecendo no servidor... é
ótimo, pois só vem o resultado do que vc deseja... Claro que mesmo que
isso aconteça no servidor, não é e nunca será tão rápido quanto um SGBD
real... Prof... como o Oracle, Firebird, SqlServer ou Light, etc...
Mas acho que o que desejo tem de ser feito criando-se views, e
procedures que totalizam dessas views, estou errado?
Já estou achando meus caminhos com criação de stored procedures e
algumas coisas estão se clareando mais para o que eu preciso fazer...
Mas, a propósito Carlos, o que vem a ser uma CTE, e qual a diferença
entre uma stored procedure, e uma solucionável?
Agradeço desde já...
Abraços...
Carlos H. Cantu escreveu:
> Nunca usei Access, mas essas funções não existem no Firebird.
> Dependendo do que vc quer fazer, pode até ser possível simula-las
> através de uma stored procedure solucionável ou talvez com uma CTE,
> mas no caso as colunas retornadas teriam que ser fixas.
>
> []s
> Carlos H. Cantu
> www.FireBase.com.br - www.firebirdnews.org
> www.warmboot.com.br - blog.firebase.com.br
>
______________________________________________
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
______________________________________________
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