Ir para o conteúdo principal

Pacote de Funções DOX (Package) - Firebird

Pensando em facilitar a busca de informações dentro do software por meio de instruções SQL, ao longo do tempo foram criadas várias funções e procedures que simplificaram ainda mais a busca de informações, seja por nossos consultores internos, ou por nossos clientes em suas automações.

A Ema disponibiliza um Pacote para criar no banco de dados que executará todas as funções e procedures instantaneamente e de uma só vez.

Para isso, basta executar os scripts abaixo para o banco especificado:

  • Primeiramente, executar a criação da package
create or alter package pkg_ema as
begin
  --variaveis
  procedure retorna_valor_variavel(xidprocesso integer, xidvariavel integer) returns (valor varchar(4000));
  procedure retorna_valor_variavel_texto(xidprocesso integer, xidvariavel integer) returns (valor varchar(4000));
  procedure retorna_valor_variavel_int(xidprocesso integer, xidvariavel integer) returns (valor numeric(15,0));
  procedure retorna_valor_variavel_valor(xidprocesso integer, xidvariavel integer) returns (valor numeric(15,2));
  procedure retorna_valor_variavel_data(xidprocesso integer, xidvariavel integer) returns (valor date);
  procedure retorna_valor_variavel_datahr(xidprocesso integer, xidvariavel integer) returns (valor timestamp);

  --grade de dados
  procedure retorna_coluna_grade(xidprocesso integer, xidatividade integer, xidformulario integer, xidgrade integer, xidvalor integer) returns (leitura varchar(2000));
  procedure retorna_coluna_grade_texto(xidprocesso integer, xidatividade integer, xidformulario integer, xidgrade integer, xidvalor integer) returns (leitura varchar(2000));
  procedure retorna_coluna_grade_int(xidprocesso integer, xidatividade integer, xidformulario integer, xidgrade integer, xidvalor integer) returns (leitura numeric(15,0));
  procedure retorna_coluna_grade_valor(xidprocesso integer, xidatividade integer, xidformulario integer, xidgrade integer, xidvalor integer) returns (leitura numeric(15,2));
  procedure retorna_coluna_grade_data(xidprocesso integer, xidatividade integer, xidformulario integer, xidgrade integer, xidvalor integer) returns (leitura date);
  procedure retorna_coluna_grade_datahr(xidprocesso integer, xidatividade integer, xidformulario integer, xidgrade integer, xidvalor integer) returns (leitura timestamp);
end
  • Em seguida, executar a criação do body
recreate package body pkg_ema as
begin
  --variaveis
  procedure retorna_valor_variavel(xidprocesso integer, xidvariavel integer) returns (valor varchar(4000))
  as
  begin
    select valoratual
      from crm_processo_variavel
     where crm_processo_variavel.idprocesso = :xidprocesso
       and crm_processo_variavel.idvariavel = :xidvariavel
      into :valor;
    suspend;
  end
  
  procedure retorna_valor_variavel_texto(xidprocesso integer, xidvariavel integer) returns (valor varchar(4000))
  as
  begin
    select valoratual--decode(upper(valoratual),'.','',replace(upper(valoratual),',','.'))
      from crm_processo_variavel
     where crm_processo_variavel.idprocesso = :xidprocesso
       and crm_processo_variavel.idvariavel = :xidvariavel
      into :valor;
    suspend;
  end

  procedure retorna_valor_variavel_int(xidprocesso integer, xidvariavel integer) returns (valor numeric(15,0))
  as
  begin
    select cast(decode(valoratual,'.','0',valoratual) as numeric(15))
      from crm_processo_variavel
     where crm_processo_variavel.idprocesso = :xidprocesso
       and crm_processo_variavel.idvariavel = :xidvariavel
      into :valor;
    suspend;
  end

  procedure retorna_valor_variavel_valor(xidprocesso integer, xidvariavel integer) returns (valor numeric(15,2))
  as
  begin
    select cast(decode(valoratual,'.','0',valoratual) as numeric(15,2))
      from crm_processo_variavel
     where crm_processo_variavel.idprocesso = :xidprocesso
       and crm_processo_variavel.idvariavel = :xidvariavel
      into :valor;
    suspend;
  end

  procedure retorna_valor_variavel_data(xidprocesso integer, xidvariavel integer) returns (valor date)
  as
  begin
    select cast(replace(decode(valoratual,'.','01/01/1900',substring(valoratual from 1 for 10)),'/','.') as date )
      from crm_processo_variavel
     where crm_processo_variavel.idprocesso = :xidprocesso
       and crm_processo_variavel.idvariavel = :xidvariavel
      into :valor;
    suspend;
  end
  
  procedure retorna_valor_variavel_datahr(xidprocesso integer, xidvariavel integer) returns (valor timestamp)
  as
  begin
    select cast(replace(decode(valoratual,'.','01/01/1900',substring(valoratual from 1 for 16)),'/','.') as timestamp)
      from crm_processo_variavel
     where crm_processo_variavel.idprocesso = :xidprocesso
       and crm_processo_variavel.idvariavel = :xidvariavel
      into :valor;
    suspend;
  end

  --grade de dados
  procedure retorna_coluna_grade(xidprocesso integer, xidatividade integer, xidformulario integer, xidgrade integer, xidvalor integer) returns (leitura varchar(2000))
  as
  begin
    select resposta
      from crm_processo_grade_valor
     where idprocesso   = :xidprocesso and
           idformulario = :xidformulario and
           idatividade  = :xidatividade and
           idgrade      = :xidgrade and
           idvalor      = :xidvalor and
           idrepeticao  = (select max(idrepeticao)
                             from crm_processo_grade_valor xx
                            where xx.idatividade = crm_processo_grade_valor.idatividade
                              and xx.idprocesso  = crm_processo_grade_valor.idprocesso)
      into leitura;
    suspend;
  end
  
  procedure retorna_coluna_grade_texto(xidprocesso integer, xidatividade integer, xidformulario integer, xidgrade integer, xidvalor integer) returns (leitura varchar(2000))
  as
  begin
    select decode(resposta,'.','',resposta)
      from crm_processo_grade_valor
     where idprocesso   = :xidprocesso and
           idformulario = :xidformulario and
           idatividade  = :xidatividade and
           idgrade      = :xidgrade and
           idvalor      = :xidvalor and
           idrepeticao  = (select max(idrepeticao)
                             from crm_processo_grade_valor xx
                            where xx.idatividade = crm_processo_grade_valor.idatividade
                              and xx.idprocesso  = crm_processo_grade_valor.idprocesso)
      into leitura;
    suspend;
  end

  procedure retorna_coluna_grade_int(xidprocesso integer, xidatividade integer, xidformulario integer, xidgrade integer, xidvalor integer) returns (leitura numeric(15,0))
  as
  begin
    select respostainteiro
      from crm_processo_grade_valor
     where idprocesso   = :xidprocesso and
           idformulario = :xidformulario and
           idatividade  = :xidatividade and
           idgrade      = :xidgrade and
           idvalor      = :xidvalor and
           idrepeticao  = (select max(idrepeticao)
                             from crm_processo_grade_valor xx
                            where xx.idatividade = crm_processo_grade_valor.idatividade
                              and xx.idprocesso  = crm_processo_grade_valor.idprocesso)
      into leitura;
    suspend;
  end

  procedure retorna_coluna_grade_valor(xidprocesso integer, xidatividade integer, xidformulario integer, xidgrade integer, xidvalor integer) returns (leitura numeric(15,2))
  as
  begin
    select cast(replace(replace(resposta,'.',''),',','.') as decimal(15,2))
      from crm_processo_grade_valor
     where  idprocesso   = :xidprocesso and
            idformulario = :xidformulario and
            idatividade  = :xidatividade and
            idgrade      = :xidgrade and
            idvalor      = :xidvalor and
            idrepeticao  = (select max(idrepeticao)
                              from crm_processo_grade_valor xx
                             where xx.idatividade = crm_processo_grade_valor.idatividade
                               and xx.idprocesso  = crm_processo_grade_valor.idprocesso)
       into leitura;
    suspend;
  end
  
  procedure retorna_coluna_grade_data(xidprocesso integer, xidatividade integer, xidformulario integer, xidgrade integer, xidvalor integer) returns (leitura date)
  as
  begin
    select respostadatahora
      from crm_processo_grade_valor
     where  idprocesso   = :xidprocesso and
            idformulario = :xidformulario and
            idatividade  = :xidatividade and
            idgrade      = :xidgrade and
            idvalor      = :xidvalor and
            idrepeticao  = (select max(idrepeticao)
                              from crm_processo_grade_valor xx
                             where xx.idatividade = crm_processo_grade_valor.idatividade
                               and xx.idprocesso  = crm_processo_grade_valor.idprocesso)
       into leitura;
    suspend;
  end

  procedure retorna_coluna_grade_datahr(xidprocesso integer, xidatividade integer, xidformulario integer, xidgrade integer, xidvalor integer) returns (leitura timestamp)
  as
  begin
    select respostadatahora
      from crm_processo_grade_valor
     where  idprocesso   = :xidprocesso and
            idformulario = :xidformulario and
            idatividade  = :xidatividade and
            idgrade      = :xidgrade and
            idvalor      = :xidvalor and
            idrepeticao  = (select max(idrepeticao)
                              from crm_processo_grade_valor xx
                             where xx.idatividade = crm_processo_grade_valor.idatividade
                               and xx.idprocesso  = crm_processo_grade_valor.idprocesso)
       into leitura;
    suspend;
  end
end

Chamando as Funções

  • Variável:
select (select * from pkg_ema.retorna_valor_variavel(idprocesso, 1)) as padrao,
       (select * from pkg_ema.retorna_valor_variavel_texto(idprocesso, 2)) as texto,
       (select * from pkg_ema.retorna_valor_variavel_int(idprocesso, 3)) as inteiro,
       (select * from pkg_ema.retorna_valor_variavel_valor(idprocesso, 4)) as valor,
       (select * from pkg_ema.retorna_valor_variavel_data(idprocesso, 5)) as data,
       (select * from pkg_ema.retorna_valor_variavel_datahr(idprocesso, 6)) as datahr
  from crm_processo where idprocesso = 0/*IDPROCESSO*/
  • Grade:
select (select * from pkg_ema.retorna_coluna_grade(x.idprocesso, x.idatividade, x.idformulario, 1, x.idvalor)) as padrao,
       (select * from pkg_ema.retorna_coluna_grade_texto(x.idprocesso, x.idatividade, x.idformulario, 2, x.idvalor)) as texto,
       (select * from pkg_ema.retorna_coluna_grade_int(x.idprocesso, x.idatividade, x.idformulario, 3, x.idvalor)) as inteiro,
       (select * from pkg_ema.retorna_coluna_grade_valor(x.idprocesso, x.idatividade, x.idformulario, 4, x.idvalor)) as valor,
       (select * from pkg_ema.retorna_coluna_grade_data(x.idprocesso, x.idatividade, x.idformulario, 5, x.idvalor)) as data,
       (select * from pkg_ema.retorna_coluna_grade_datahr(x.idprocesso, x.idatividade, x.idformulario, 6, x.idvalor)) as datahr
  from crm_processo_grade_valor x
 where idprocesso = 0/*IDPROCESSO*/ and idatividade = 0/*IDATIVIDADE*/ and idformulario = 0/*IDFORMULARIO*/
   and idrepeticao = (select max(idrepeticao) from crm_processo_grade_valor where idprocesso = x.idprocesso and idatividade = x.idatividade)
   and idgrade = 1 order by idvalor