Ir para conteúdo
  • Cadastre-se

dev botao

Como executar o resultado de uma procedure? [firebird 2.5]


Recommended Posts

create or alter procedure SP_ACOMPANHA_SALDO2 (
    WPA_DATA_INICIAL date,
    WPA_DATA_FINAL date)
returns (
    RET_GRUPO varchar(100),
    RET_DIA1 decimal(10,2),
    RET_DIA2 decimal(10,2),
    RET_DIA3 decimal(10,2),
    RET_DIA4 decimal(10,2),
    RET_DIA5 decimal(10,2),
    RET_DIA6 decimal(10,2),
    RET_DIA7 decimal(10,2),
    RET_DIA8 decimal(10,2),
    RET_DIA9 decimal(10,2),
    RET_DIA10 decimal(10,2),
    RET_DIA11 decimal(10,2),
    RET_DIA12 decimal(10,2),
    RET_DIA13 decimal(10,2),
    RET_DIA14 decimal(10,2),
    RET_DIA15 decimal(10,2),
    RET_DIA16 decimal(10,2),
    RET_DIA17 decimal(10,2),
    RET_DIA18 decimal(10,2),
    RET_DIA19 decimal(10,2),
    RET_DIA20 decimal(10,2),
    RET_DIA21 decimal(10,2),
    RET_DIA22 decimal(10,2),
    RET_DIA23 decimal(10,2),
    RET_DIA24 decimal(10,2))
as
declare variable DATA_DISPONIVEL date;
begin
  begin
      for select GRUPO,
                 sum(iif(extract(day from s.data) = 1, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 2, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 3, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 4, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 5, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 6, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 7, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 8, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 9, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 10, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 11, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 12, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 13, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 14, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 15, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 16, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 17, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 18, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 19, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 20, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 21, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 22, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 23, PESO, 0)) as RET_DIA,
                 sum(iif(extract(day from S.DATA) = 24, PESO, 0)) as RET_DIA
          from (select distinct cast(C.DTA as date) as DATA,
                                case
                                  when UM.CODACESSOG in (3142, 3144, 3145, 3149, 6653, 6654, 6655, 7196, 7197, 7198, 7199, 7200, 7201, 7202, 7203, 7204, 7205) then 'CANTONEIRA GROSSA EQSE'
                                  when C.NOME like '%PERFIL% %IND% %GALV%' then 'TELHAS'
                                  when C.NOME like 'TUBO%' then 'TUBO'
                                  when C.NOME like '%CH% %2Q%' then 'CHAPA 2Q'
                                  when C.NOME like '%TIRA%EQSE%' then 'TIRA EQSE'
                                  when C.COD_ACESSO_G = 6002 then 'TIRA RETRABALHO'
                                  when C.NOME like '%TIRA%' then 'TIRA COMERCIAL'
                                  when UM.CODACESSOG in (3776, 2050, 1098, 1104, 1107, 1304, 1099, 1138, 1100, 1103, 1097, 3774, 3775, 1560) then 'RECORTE'
                                  when C.NOME like '%CANTONEIRA%' then 'CANTONEIRA FINA EQSE'
                                  when UM.CODACESSOG = 3702 then 'CANTONEIRA FINA EQSE'
                                  when C.NOME like 'PERFIL% %EQSE%' then 'PERFIL EQSE'
                                  when C.NOME like 'PERFIL%' then 'PERFIL EQSE'
                                  when C.NOME like 'EQSE%' then 'PERFIL EQSE'
                                  when C.NOME like '%PROMO%' then 'PERFIL EQSE'
                                  when C.NOME like '%2Q% %PERFIL%' then 'PERFIL EQSE'
                                  when C.NOME like '%PAINEL 2Q%' then 'PERFIL EQSE'
                                  else 'NAO TEM GRUPO'
                                end as GRUPO,
                                sum(UM.PLIQUI * C.ESTOQUE_ATU) as PESO
                from TB_RELATORIO_PCP C
                inner join ARQES01 UM on C.COD_ACESSO_G = UM.CODACESSOG
                where C.DTA between :WPA_DATA_INICIAL and :WPA_DATA_FINAL and
                      extract(weekday from C.DTA) not in (0, 6) and
                      C.NOME not like '%NAO TEM GRUPO%'
                group by 1, 2) S
          group by 1
          into :RET_GRUPO, :RET_DIA1, :RET_DIA2, :RET_DIA3, :RET_DIA4, :RET_DIA5, :RET_DIA6, :RET_DIA7, :RET_DIA8,
               :RET_DIA9, :RET_DIA10, :RET_DIA11, :RET_DIA12, :RET_DIA13, :RET_DIA14, :RET_DIA15, :RET_DIA16,
               :RET_DIA17, :RET_DIA18, :RET_DIA19, :RET_DIA20, :RET_DIA21, :RET_DIA22, :ret_dia23, :RET_DIA24

      do
      begin
        --V_CURRENT_DATE = V_CURRENT_DATE + 1;
        suspend;

      end
      --V_CURRENT_DATE = V_CURRENT_DATE + 1;
      -- Avança para o próximo dia
    end
  end

Eu criei essa procedure, para "pivotar" as datas como colunas. Somo os pesos dos grupos, na data especifica. Criei as colunas fixas, mas para o que preciso no momento, me atende um pouco. O único problema que estou enfrentando é com dias que não tem movimentação, feriados e fins de semana, onde as colunas ficam zeradas. Queria uma forma de só considerar os dias úteis, o problema é que dentro do case passo o dia estático. Não encontrei solução melhor para isso.


Eu também criei uma procedure que gera um select dinâmico que lista as datas e já retorna uma strinh com a consulta nova. Mas não sei como executar o resultado dessa procedure, por isso estou tentando esse forma. Mas ainda não desisti da outra

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.