ENVIAR e-MAIL A PARTIR DO BANCO COM TIPO CLOB

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
mih_cns
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 25 Jun 2015 11:06 am

Olá,

Dei uma olhada nos tópicos anteriores e não achei nada sobre, se já foi perguntado desculpe.
Seguinte sou nova com o ORACLE, ainda estou aprendendo. O meu problema é: Estou querendo enviar um e-mail a partir do banco com os registros do meu select. Porém são muitos registros e não é possível usar o tipo VARCHAR2, logo estou tentando usar o tipo CLOB. Mas não estou conseguindo, sempre da erro, ou envia o e-mail sem o conteúdo.
Abaixo está o código que eu estava usando. Se alguém puder ajudar eu agradecerei.

Selecionar tudo

  procedure PRD_SEND_MAIL(
                  pSender      in varchar2,
                  pRecipient   in varchar2,
                  pMailHost    in varchar2 DEFAULT 'smtp-appl1.senado.gov.br',
                  pCcRecipient in varchar2 DEFAULT null,
                  pSubject     in varchar2,
                  pMessage     in CLOB,
                  pStatus      in out nocopy varchar2)
   is
      vMessage     CLOB := pMessage;
      vHost        varchar2(100) := 'smtp-appl1.senado.gov.br';
      vCcRecipient varchar2(100)   := pCcRecipient;
      vConnection  utl_smtp.connection;
      vReply       reply;
      crlf                    constant varchar2 (2) := CHR(13) || CHR(10);
      pos                     PLS_INTEGER := 1;
      bytes_o_data            CONSTANT PLS_INTEGER := 32767;
      offset                  PLS_INTEGER := bytes_o_data;
      msg_length              CONSTANT PLS_INTEGER := DBMS_LOB.getlength (pMESSAGE);

      
      

      PROCEDURE SEND_HEADER(header IN varchar2, content IN varchar2)
      AS
      BEGIN
        utl_smtp.write_data(vConnection, header || ': ' || content || vCRLF);
      END;
   begin
      -- Abre conexão
      pStatus := 'OK';

      vConnection := utl_smtp.open_connection(vHost);

      -- efetua o Handshake.
      utl_smtp.helo(vConnection, vHost);

      -- Assinala remetente e destinatário
      utl_smtp.mail(vConnection, pSender);
      utl_smtp.rcpt(vConnection, pRecipient);

      -- Verifica "destinatário-cópia"
      if (vCcRecipient is not null) then
          utl_smtp.rcpt(vConnection, vCcRecipient);
      else
          vCcRecipient := '';
      end if;

      -- Cria mensagem
      
      utl_smtp.open_data(vConnection);
--      send_header('Date',          TO_CHAR(SYSDATE, 'fmDy, dd Mon yyyy fxhh24:mi:ss') );
      send_header('From', pSender);
      send_header('To', pRecipient);
      send_header('Subject', pSubject);
--      send_header('Cc',            vCcRecipient);
      send_header('MIME-Version', '1.0');
      send_header('Content-Type', 'text/html; charset=iso-8859-1');
      send_header('Content-Disposition', 'inline');
      send_header('Content-Transfer-Encoding', 'quoted-printable');

      -- envia os dados
  
       while pos < msg_length
           loop
             utl_smtp.write_data (vConnection, dbms_lob.substr (vmessage, offset, pos));
             pos := pos + offset;
             offset := LEAST (bytes_o_data, msg_length - offset);
            end loop; 

 
      utl_smtp.close_data(vConnection);

      -- Fecha conexão
      utl_smtp.quit(vConnection);

      exception
        when others then
          pStatus := substr(sqlerrm, 1, 200);

   end PRD_SEND_MAIL;
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Sister mih_cns,conseguiria postar o erro do envio ?
Vamos ver se entendi ,você quer enviar os registros de uma consulta por email é isso ? E está o usando o datatype CLOB ?
Seguinte: não tenho conhecimento do tamanho dessa sua massa de registros ,mas já te alerto ,se a mesma for superior a 25 MB não terá êxito ,pois qualquer serviço de email possui essa capacidade máxima para anexar arquivos de envio.
Uma explicação básica e escovação de Bits :quando é enviado um arquivo de 25 MB ,o servidor de email transforma o arquivo em caracteres ASCII e consequentemente duplica o tamanho do Email no processo de envio .Resumindo :seria como pegar um email qualquer no seu formato normal e transformá-lo em em ASCII ,esse processo de conversão duplica o tamanho do email,lembrando que esse processo é feito somente no envio ,já no recebimento na outra ponta o email é convertido para o seu formato e tamanho normal.
Exemplo : 2 MB = 4 MB
5 MB = 10 MB
25 MB = 50 MB
Logo o limite de envio é 25 MB
Os tipos de dados Clobs são utilizados normalmente para armazenar na ordem de até 4 GB :textos,videos,áudio,entre outros arquivos pesados.Não sei se isso aplica-se ao seu caso.
De qualquer forma ,posta ai o erro pra gente poder te ajudar.
mih_cns
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 25 Jun 2015 11:06 am

Não seria bem isso, pois eu não quero gerar um arquivo. E quero que o resultado do meu select seja enviado no próprio corpo do e-mail. Por exemplo:

Eu fiz uma procedure e quando executada ela deveria enviar o e-mail com resultado
Eu tenho como resultado do select 120 registros, com várias colunas. Como no modelo abaixo.
Porém quando envio o e-mail ocorre os seguintes erros.


ORA - 06502
ORA - 06512

Selecionar tudo

1		X664	Rua e estrada		N	S		X66.4	9	Auto-intoxicação intencional por solventes orgânicos, hidrocarbonetos halogenados e seus vapores - rua e estrada	
2		X665	Areas de comercio e de servicos		N	S		X66.5	9	Auto-intoxicação intencional por solventes orgânicos, hidrocarbonetos halogenados e seus vapores - áreas de comércio e de serviços	
3		X666	Areas industriais e em construcao		N	S		X66.6	9	Auto-intoxicação intencional por solventes orgânicos, hidrocarbonetos halogenados e seus vapores - áreas industriais e em construção	
4		X667	Fazenda		N	S		X66.7	9	Auto-intoxicação intencional por solventes orgânicos, hidrocarbonetos halogenados e seus vapores - fazenda	
5		X668	Outr locais espec		N	S		X66.8	9	Auto-intoxicação intencional por solventes orgânicos, hidrocarbonetos halogenados e seus vapores - outros locais especificados	
6		X669	Local NE		N	S		X66.9	9	Auto-intoxicação intencional por solventes orgânicos, hidrocarbonetos halogenados e seus vapores - local não especificado	
7		X670	Residencia		N	S		X67.0	9	Auto-intoxicação intencional por outros gases e vapores - residência	
8		X671	Habitacao coletiva		N	S		X67.1	9	Auto-intoxicação intencional por outros gases e vapores - habitação coletiva	
9		X672	Escolas outr instit areas admin publica		N	S		X67.2	9	Auto-intoxicação intencional por outros gases e vapores - escolas, outras instituições e áreas de administração pública	
10		X673	Area p/a pratica de esportes e atletismo		N	S		X67.3	9	Auto-intoxicação intencional por outros gases e vapores - área para a prática de esportes e atletismo	
11		X674	Rua e estrada		N	S		X67.4	9	Auto-intoxicação intencional por outros gases e vapores - rua e estrada	
12		X675	Areas de comercio e de servicos		N	S		X67.5	9	Auto-intoxicação intencional por outros gases e vapores - áreas de comércio e de serviços	
13		X676	Areas industriais e em construcao		N	S		X67.6	9	Auto-intoxicação intencional por outros gases e vapores - áreas industriais e em construção	
14		X677	Fazenda		N	S		X67.7	9	Auto-intoxicação intencional por outros gases e vapores - fazenda	
15		X678	Outr locais espec		N	S		X67.8	9	Auto-intoxicação intencional por outros gases e vapores - outros locais especificados	
16		X679	Local NE		N	S		X67.9	9	Auto-intoxicação intencional por outros gases e vapores - local não especificado	
17		X680	Residencia		N	S		X68.0	9	Auto-intoxicação por e exposição, intencional, a pesticidas - residência	
18		X681	Habitacao coletiva		N	S		X68.1	9	Auto-intoxicação por e exposição, intencional, a pesticidas - habitação coletiva	
19		X682	Escolas outr instit areas admin publica		N	S		X68.2	9	Auto-intoxicação por e exposição, intencional, a pesticidas - escolas, outras instituições e áreas de administração pública	
maxwbh
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 21 Out 2014 5:16 pm
Localização: Belo Horizonte - MG
Maxwell da Silva Oliveira
(31) 9325.7479/ 9474.8854
maxwbh@gmail.com
http://lnkd.in/PkcQ5y

mih_cns ,
os erros informados são referente a tamanho de dados.
Tire o Exception da sua procedure e deixe o erro estourar para ver onde ele realmente esta ocorrendo
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 15 visitantes