› Fóruns › SQL e PL/SQL › problema com trigger › problema com trigger
create or replace procedure IA_P_GERA_H_ENTRADA(
marc_cod_cracha in varchar2 ,
coda_cod_coletor in varchar2,
marc_dat_marcacao in date
) is
vexist varchar2(1);
vhorrefreal integer;
vdfjorentradanucleo_func integer;
vsetincodigo integer;
vDFFUNCRACHA varchar2(17);
vemail varchar2(50);
vnome varchar2(50);
vsysdate date;
crlf varchar2( 2 ):= CHR( 13 ) || CHR( 10 );
v_mensagem varchar2(800);
begin
vsysdate:= sysdate;
begin
select nvl('S','N')
into vexist
from
ia_t_gera_h_entrada t
where
t.crac_cod_cracha = marc_cod_cracha
and
to_date(t.marc_dt_marcacao,'dd/mm/yyyy') = to_date(vsysdate,'dd/mm/yyyy');
— to_date(t.marc_dt_marcacao,’dd/mm/yyyy’) = to_date(:new.marc_dat_marcacao,’dd/mm/yyyy’);
exception when no_data_found then
vexist := ‘N’;
end;
if vexist = 'N' then
begin
select
jor.dfjorentradanucleo,
fun.dffunnome
into
vdfjorentradanucleo_func,
vnome
from forponto.pfunfpto fun,
forponto.pfuhfpto fhor,
forponto.phorfpto hor,
forponto.phojfpto hjor,
forponto.pjorfpto jor
where fun.dffuncracha = fhor.dffuncracha
and fhor.dfhorcodigo = hor.dfhorcodigo
and hor.dfhorcodigo = hjor.dfhorcodigo
and hjor.dfjorcodigo = jor.dfjorcodigo
and fun.dffunativo = 'S'
and hjor.dfhojorigem = 'H'
and hjor.dftpdcodigo in ('02','04')
and fhor.dffuhinicio = trunc(sysdate)
and hjor.dfhojfator = trim(to_char(to_char(trunc(sysdate), 'D'),'000'))
and not exists (select *
from forponto.pfuafpto aff
where fun.dffuncracha = aff.dffuncracha
and aff.dfmtvcodigo = '100'
)
and to_number(fun.dffuncracha) = to_number(marc_cod_cracha);
exception when others then
null;
end;
vhorrefreal := ((to_number(trim(to_char(marc_dat_marcacao,'hh24'))) * 60) + to_number(trim(to_char(marc_dat_marcacao,'mi'))));
begin
insert into mgia.IA_T_GERA_H_ENTRADA(crac_cod_cracha,
coda_cod_coletor,
marc_dt_marcacao,
marc_hor_marcacao_atual,
dfjorentradanucleo_func)
values
(marc_cod_cracha,
coda_cod_coletor,
marc_dat_marcacao,
vhorrefreal,
vdfjorentradanucleo_func);
exception when others then
null;
end;
—————————- hora de tolerancia por exemplo 30 minutos
— vhoratolerancia:=5;
— if vhorrefreal > (vdfjorentradanucleo_func+vhoratolerancia) then
if vhorrefreal > (vdfjorentradanucleo_func) then
begin
select
E.SET_IN_CODIGO
into
vsetincodigo
from
mglan.lan_encarregados E
where
to_number(E.dffuncracha) = to_number(marc_cod_cracha);
exception when others then
null;
end;
begin
insert into mgia.IA_T_GERA_PENDENCIA_COLAB(crac_cod_cracha,
marc_dt_marcacao,
set_in_codigo,
status)
values(
marc_cod_cracha,
marc_dat_marcacao,
vsetincodigo,
0);
exception when others then
null;
end;
begin
SELECT
P.DFFUNCRACHA
INTO
vDFFUNCRACHA
FROM
FORPONTO.PFUNFPTO P,
MGLAN.LAN_SETORENC E
WHERE
P.DFFUNCRACHA=E.ENC_ST_CRACHA
AND
E.SET_IN_CODIGO=vsetincodigo
AND
P.DFFUNATIVO = 'S'
AND
P.DFFUNCRACHA NOT IN(SELECT
A.DFFUNCRACHA
FROM
FORPONTO.PFUAFPTO A
WHERE
A.DFMTVCODIGO IN('100','101'));
exception when others then
null;
end;
—- dbms_output.put_line(‘ valormensal –> ‘ || vDFFUNCRACHA);
begin
SELECT
l.usu_st_email
into
vemail
FROM
MGLAN.LAN_ENCARREGADOS L
WHERE
L.ENC_ST_TIPO = 'E'
AND
to_number(L.DFFUNCRACHA) = to_number(vDFFUNCRACHA);
exception when others then
null;
end;
v_mensagem := crlf;
v_mensagem := v_mensagem || 'Atencao! Atraso de Funcionário! no dia '|| to_char(marc_dat_marcacao) || '';
v_mensagem := v_mensagem || crlf;
v_mensagem := v_mensagem || crlf;
v_mensagem := v_mensagem || 'Existe atraso do funcionário '|| to_char(vnome) || ' .';
v_mensagem := v_mensagem || crlf;
v_mensagem := v_mensagem || 'Favor entrar no sistema Encarregados e avaliar este atraso.';
v_mensagem := v_mensagem || crlf;
v_mensagem := v_mensagem || crlf;
v_mensagem := v_mensagem || '<<<>>>';
v_mensagem := v_mensagem || crlf;
v_mensagem := v_mensagem || crlf;
mgia.envio_email(<a href="mailto:'mega@lanmard.local" />'mega@lanmard.local</a>','evandroa@lanmard.local','Atraso de Funcionario!',v_mensagem);
---mgia.envio_email(<a href="mailto:'mega@lanmard.local" />'mega@lanmard.local</a>',vemail,'Atraso de Funcionario!',v_mensagem);
end if;
—————————–hora de tolerancia por exemplo 30 minutos
end if;
end IA_P_GERA_H_ENTRADA;