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