Sou novo em programação e preciso de uma ajuda com uma procedure para envio de email
Tenho uma tabela aonde são gravadas as informações das alterações realizados no ponto e preciso que esses dados sejam enviados para os seus determinados chefes, estou anexando o código quem puder me ajudar eu agradeço.
Att,
Tiago
create or replace
PROCEDURE PRC_PONTO_PORTAL IS
--====================================================================================================================================
-- Procedure para informar as marcações do ponto inseridas no portal
-- Versão: 1.0
--====================================================================================================================================
v_handle UTL_FILE.file_type;
v_tab_anexo SendMailJPkg.ATTACHMENTS_LIST := SendMailJPkg.ATTACHMENTS_LIST(NULL);
v_cabecalho VARCHAR2(2000) := '';
v_linha VARCHAR2(2000) := '';
v_detalhe varchar2(2000) := '';
v_email VARCHAR2(500) := null;
v_emailCC VARCHAR2(500) := null;
v_dir_gravacao VARCHAR2(60) := '';
v_dt_inicio DATE := trunc(sysdate-1);
v_dt_fim DATE := trunc(sysdate);
v_msg_subject VARCHAR2(200) := 'Aprovação de Batidas Inseridas manualmente - Portal de RH';
v_nom_arquivo VARCHAR2(200) := 'Batidas_Inseridas.csv';
v_contador NUMBER := 0;
v_cdEmpresa NUMBER(3):= 0;
v_nmEmpresa VARCHAR2(100) := '';
v_nomSAP VARCHAR2(2000) := '';
v_desAtividade VARCHAR2(2000) := '';
v_desObservacao VARCHAR2(2000) := '';
v_email VARCHAR2(500) := null;
v_email_coordenador VARCHAR2(500) := null;
-- Verifica se existe marcações de ponto inseridas no portal
CURSOR BATIDAS_PONTO IS
select a.codcoligada coligada, b.codfilial filial, a.chapa chapa, b.nome nome, a.data datamarcacao, b.codsecao secao, c.descricao secaodesc,to_char(trunc((a.batida / 60),0),'fm00') || ':' || to_char((a.batida - (trunc(a.batida / 60) * 60)),'fm00')batida,
decode(a.natureza,1,'Saída',5,'Saída',0,'Entrada',4,'Entrada') natureza ,
(select a.chapasubst from rm.psubstchefe a where a.codsecao=substr(b.codsecao,1,13))Gerente,
(select email from rm.ppessoa where codigo = (select codpessoa from rm.pfunc where chapa=(select a.chapasubst from rm.psubstchefe a where a.codsecao=substr(b.codsecao,1,13))))email_gerente,
(select a.chapasubst from rm.psubstchefe a where a.codsecao=substr(b.codsecao,1,18))Coordenador,
(select email from rm.ppessoa where codigo = (select codpessoa from rm.pfunc where chapa=(select a.chapasubst from rm.psubstchefe a where a.codsecao=substr(b.codsecao,1,18))))email_coordenador,
(select a.chapasubst from rm.psubstchefe a where a.codsecao=substr(b.codsecao,1,21))Supervisor,
(select email from rm.ppessoa where codigo = (select codpessoa from rm.pfunc where chapa=(select a.chapasubst from rm.psubstchefe a where a.codsecao=substr(b.codsecao,1,21))))email_supervisor,
a.reccreatedby usuario_inclusao
from rm.abatfun a, rm.pfunc b, rm.psecao c
where a.codcoligada=b.codcoligada and
b.codcoligada=c.codcoligada and
b.codsecao=c.codigo and
a.chapa=b.chapa and
a.status='T' and
a.datainsercao=to_char(sysdate,'dd/mm/yy');
BEGIN
-- Recupera diretorio de gravação;
BEGIN
select TRIM(directory_path) || '/'
into v_dir_gravacao
from all_directories
where directory_name = 'DIR_FILTRO_EXP';
EXCEPTION WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20020, 'Erro ao selecionar diretório de gravação ! ' ||SQLERRM);
END;
v_handle := UTL_FILE.fopen ('DIR_FILTRO_EXP', v_nom_arquivo, 'W');-- Abertura de Arquivo
v_linha := 'COLIGADA;FILIAL;CHAPA;NOME;DATA_MARCACAO;CODIGO_SECAO;DESCRICAO;BATIDAS;TIPO_BATIDA';
UTL_FILE.put_line (v_handle, v_linha);
BEGIN
FOR I IN BATIDAS_PONTO
LOOP
-- if v_email_coordenador = i.email_coordenador then
if i.chapa > 0 then
v_linha := ( i.coligada || ';' ||
i.filial || ';' ||
I.chapa || ';' ||
I.nome || ';' ||
I.datamarcacao || ';' ||
I.secao || ';' ||
i.secaodesc || ';' ||
i.batida || ';' ||
i.natureza );
UTL_FILE.put_line (v_handle, v_linha);
v_linha := null;
v_contador := v_contador + 1;
END IF;
END LOOP;
END;
UTL_FILE.fclose (v_handle);
-- Envia email;
IF v_contador > 0 then
v_tab_anexo.extend;
v_tab_anexo(1) := v_dir_gravacao || TRIM(v_nom_arquivo);
begin
SendMailJPkg.send_mail (p_msg_from => 'webm@teste.com.br',
p_msg_to => 'teste@teste.com.br',
p_msg_subject => 'Aprovação de Marcações de Ponto',
p_msg_text => 'Segue em anexo arquivo referente as Marcações de Ponto inseridas via Portal de RH.' || chr(10) ||chr(10) ||
'Favor verificar e Aprovar as Marcações de Ponto.' || chr(10) ||chr(10) ||
'Este email foi gerado automaticamente pelo sistema, portanto não o responda.',
p_msg_attach => v_tab_anexo);
-- UTL_FILE.fremove ('DIR_FILTRO_ANCORA_EXP', v_nom_arquivo);
EXCEPTION WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20020, 'Erro ao enviar email! ' ||SQLERRM);
end;
END IF;
v_contador := 0;
v_email_coordenador := null;
EXCEPTION WHEN others THEN
RAISE_APPLICATION_ERROR(-20020, 'Erro na execução da procedure PRC_PONTO_PORTAL: ' ||SQLERRM);
END;