[firebase-br] Dúvidas de SQL no Firebird.

Magno System magno em speet.com.br
Dom Jan 18 23:35:00 -03 2009


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 





Mais detalhes sobre a lista de discussão lista