Envio de uma consulta por e-mail formatada

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
Robson Costa
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 155
Registrado em: Sex, 17 Out 2008 6:05 pm
Localização: Campo Grande - MS

Boa tarde,

Fiz uma procedure que envia o resultado de um select para um e-mail, porém gostaria que viesse tudo alinhado, da seguinte forma:

Selecionar tudo

NUMERO  USUARIO                      LOTACAO    DOC       DATA        DIAS
-------------------------------------------------------------------------------------
xyxyxyx xyxyxyxyxyxyx                xyyxyx     xyxyxyx   xy/xy/xyxy  xyx
A procedure é a seguinte:

Selecionar tudo

create or replace
PROCEDURE proc1 IS

CURSOR EXC IS 
       select t1.id,t5.usuario,s3.secao,s1.numero,
              s1.data,trunc((sysdate - s1.data) * 1440)
       from tabela1 t1,tabela2 t2,tabela3 t3,tabela4 t4,tabela5 t5
       where ...
             
TYPE REG IS RECORD (SES ,
                             USU,
                             LOT,
                             NR,
                             DATAb,
                             TEMPO);
                             
rec reg;
v_msg varchar2(5000);
BEGIN
  open exc;
  v_msg := '<html><b>Lista</b><p>'||
           'ID '||'&nbsp;'||'Usu';
  for i in 1 .. 34 loop
      v_msg:= v_msg||'&nbsp;&nbsp;';
  end loop;
  v_msg := v_msg||'Lot      Numero      Data        Tempo<br>';
  for i in 1 .. 86 loop
      v_msg := v_msg||'-';
  end loop;
  v_msg := v_msg||'<br>';
  loop
    fetch exc rec;
    exit when exc%notfound;
    v_msg := v_msg||rec.sessao||'&nbsp;'||rec.usuario;
    for i in 1 .. (54 - length(rec.usuario)) loop
       v_msg := v_msg||'&nbsp;';
    end loop;
    v_msg := v_msg||rec.lotacao;
    for i in 1 .. 10 - (length(rec.lotacao)) loop
        v_msg := v_msg||'&nbsp;';
    end loop;
    v_msg := v_msg||rec.nr||'&nbsp;&nbsp;'||
             to_char(rec.datab,'DD/MM/YYYY - HH24:MI:SS')||'&nbsp;&nbsp;'||rec.tempo||'<br>';
  end loop;
  close excedidos;
  v_msg := v_msg||'</p></html>';
  envia_email('xxxx@xx.xx','Lista',v_msg);
END proc1;
O tamanho de cada campo é:

Selecionar tudo

Rec.ses - 6
rec.usu - 30
rec.lot - 10
rec.nr - 13
rec.datab - 10
rec.dias - 5
Como posso fazer isso?
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

amigo.. acho q não tem como te ajudar muito não..

é como trabalhar com o padrão cnab.. você tem que contar tudo e tabular na mao.. em fim é um trabalho chato


agora como você está usando o email em formato html pode dar uma olhada aqui e se não estranhar muito o html vai ser mais facil

http://www.w3schools.com/html/html_tables.asp
basta criar uma tabela no html e ai você tera como controlar melhor (dimensionar, bordas, linhas, colunas, cor e etc )
Robson Costa
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 155
Registrado em: Sex, 17 Out 2008 6:05 pm
Localização: Campo Grande - MS

Valeu, com sua dica ficou bem melhor.
Responder
  • Informação