[firebase-br] Stored Procedure Selecionável - "Referência Cruzada"

Jader Ricardo jader em caramuru.com
Ter Abr 11 14:22:36 -03 2006


Boa tarde amigos !!!
 
Estou com uma dificuldade em criar uma SP selecionável, eu tenho uma tabela
de serviços, nesta tabela de serviços tenho várias vezes o mesmo individuo,
nestes registros tenho um flag dizendo se foi entregue ou não um determinado
documento. O que eu preciso é fazer uma procedure que me devolvesse todos os
individuos com o respectivo mes "flegado" ou não. Mais ou menos assim :
 
Individuo                  Janeiro      Fevereiro       Março 
______________________________________________________________________
Jader Ricardo              ENTREGUE                     ENTREGUE
João da Silva                           ENTREGUE
José de Oliveira           ENTREGUE
 
O problema é que na minha tabela eu tenho 440 registros, e na SP abaixo só
consigo retornar 439. Caso alguém possa me ajudar, com exemplos ou dizendo o
que está errado eu ficaria grato.
 
   SELECT COUNT(*) FROM TBSERVICOSARECEBER INTO :VARTOTREG;
   VARREGATU = 0;
   FOR SELECT SAR.PACSAR, PAC.DESPAC, EXTRACT(MONTH FROM SAR.DTSSAR),
SAR.ENTSAR
   FROM TBSERVICOSARECEBER SAR LEFT JOIN TBPACIENTE PAC ON SAR.PACSAR =
PAC.CODPAC
   ORDER BY PAC.DESPAC INTO :VARCODPAC, :VARDESPAC, :VARMESENT, :VARENTSAR
DO
     BEGIN
       VARREGATU = VARREGATU +1;
       IF (:VARDESPA2 <> :VARDESPAC) THEN
         BEGIN
           PSCODPAC = :VARCODPA2;
           PSDESPAC = :VARDESPA2;
           PSMESJAN = :VARMESJAN;
           PSMESFEV = :VARMESFEV;
           PSMESMAR = :VARMESMAR;
           PSMESABR = :VARMESABR;
           PSMESMAI = :VARMESMAI;
           PSMESJUN = :VARMESJUN;
           PSMESJUL = :VARMESJUL;
           PSMESAGO = :VARMESAGO;
           PSMESSET = :VARMESSET;
           PSMESOUT = :VARMESOUT;
           PSMESNOV = :VARMESNOV;
           PSMESDEZ = :VARMESDEZ;
           VARMESJAN = NULL;
           VARMESFEV = NULL;
           VARMESMAR = NULL;
           VARMESABR = NULL;
           VARMESMAI = NULL;
           VARMESJUN = NULL;
           VARMESJUL = NULL;
           VARMESAGO = NULL;
           VARMESSET = NULL;
           VARMESOUT = NULL;
           VARMESNOV = NULL;
           VARMESDEZ = NULL;
           SUSPEND;
         END
       VARCODPA2 = :VARCODPAC;
       VARDESPA2 = :VARDESPAC;
       IF ((:VARMESENT = 1) AND (:VARENTSAR = 'E')) THEN
         VARMESJAN = 'ENTREGUE';
       ELSE
       IF ((:VARMESENT = 2) AND (:VARENTSAR = 'E')) THEN
         VARMESFEV = 'ENTREGUE';
       ELSE
       IF ((:VARMESENT = 3) AND (:VARENTSAR = 'E')) THEN
         VARMESMAR = 'ENTREGUE';
       ELSE
       IF ((:VARMESENT = 4) AND (:VARENTSAR = 'E')) THEN
            VARMESABR = 'ENTREGUE';
       ELSE
       IF ((:VARMESENT = 5) AND (:VARENTSAR = 'E')) THEN
         VARMESMAI = 'ENTREGUE';
       ELSE
       IF ((:VARMESENT = 6) AND (:VARENTSAR = 'E')) THEN
            VARMESJUN = 'ENTREGUE';
       ELSE
       IF ((:VARMESENT = 7) AND (:VARENTSAR = 'E')) THEN
            VARMESJUL = 'ENTREGUE';
       ELSE
       IF ((:VARMESENT = 8) AND (:VARENTSAR = 'E')) THEN
            VARMESAGO = 'ENTREGUE';
       ELSE
       IF ((:VARMESENT = 9) AND (:VARENTSAR = 'E')) THEN
            VARMESSET = 'ENTREGUE';
       ELSE
       IF ((:VARMESENT = 10) AND (:VARENTSAR = 'E')) THEN
            VARMESOUT = 'ENTREGUE';
       ELSE
       IF ((:VARMESENT = 11) AND (:VARENTSAR = 'E')) THEN
            VARMESNOV = 'ENTREGUE';
       ELSE
       IF ((:VARMESENT = 12) AND (:VARENTSAR = 'E')) THEN
            VARMESDEZ = 'ENTREGUE';
       IF (:VARREGATU = :VARTOTREG) THEN
         BEGIN
           PSCODPAC = :VARCODPA2;
           PSDESPAC = :VARDESPA2;
           PSMESJAN = :VARMESJAN;
           PSMESFEV = :VARMESFEV;
           PSMESMAR = :VARMESMAR;
           PSMESABR = :VARMESABR;
           PSMESMAI = :VARMESMAI;
           PSMESJUN = :VARMESJUN;
           PSMESJUL = :VARMESJUL;
           PSMESAGO = :VARMESAGO;
           PSMESSET = :VARMESSET;
           PSMESOUT = :VARMESOUT;
           PSMESNOV = :VARMESNOV;
           PSMESDEZ = :VARMESDEZ;
           SUSPEND;
         END
     END
END
 
Atenciosamente,
Jader Ricardo





Mais detalhes sobre a lista de discussão lista