[firebase-br] SUSPEND com WITH

Marcelo Geyer estanisgeyer em gmail.com
Ter Maio 5 16:32:39 -03 2009


Buenas pessoal,

Tenho um SELECT em minha aplicação que retorna o id, identificação e saldo
de contas. Estou pensando em portar isso para uma procedure, eu até tentei
mas não consegui o resultado esperado em uma tabela. Alguém poderia me dizer
se isso é viável? Segue minha procedure:

CREATE PROCEDURE SALDO_CONTAS
RETURNS
 ( ID INTEGER,
   IDENTIFICACAO VARCHAR(45),
   SALDO MONEY )
AS
DECLARE VARIABLE vID INTEGER;
DECLARE VARIABLE vIDENTIFICACAO VARCHAR(45);
DECLARE VARIABLE vSALDO MONEY;
BEGIN
  for
    WITH CREDITO AS (
      SELECT C.ID, C.IDENTIFICACAO, COALESCE(SUM(M.VALOR), 0) AS TOTALCRED
      FROM CONTAS C
      JOIN CONTAS_MOVIMENTO M ON M.ID_CONTA = C.ID
      WHERE M.LANCAMENTO = 1
      AND C.TIPO != 3
      GROUP BY C.ID, C.IDENTIFICACAO),

    DEBITO AS (
      SELECT C.ID, C.IDENTIFICACAO, COALESCE(SUM(M.VALOR), 0) AS TOTALDEB
      FROM CONTAS C
      JOIN CONTAS_MOVIMENTO M ON M.ID_CONTA = C.ID
      WHERE M.LANCAMENTO = 0
      AND C.TIPO != 3
      GROUP BY C.ID, C.IDENTIFICACAO)

    SELECT CR.ID, CR.IDENTIFICACAO, (CR.TOTALCRED - DE.TOTALDEB) AS TOTAL
    FROM CREDITO CR
    LEFT JOIN DEBITO DE ON CR.ID = DE.ID
    ORDER BY CR.IDENTIFICACAO ASC
    INTO :vID, :vIDENTIFICACAO, :vSALDO

    do
    begin
        suspend;
    end
END^

Abraços,

Marcelo E. Geyer
Standard Net Tecnologia e Informação



Mais detalhes sobre a lista de discussão lista