html格式郵件監控failures大於0的job

lusklusklusk發表於2017-05-25
create or replace procedure sp_job_check as
v_counter number;
v_html varchar2(30000);
begin
select max(failures) into v_counter from dba_jobs;
if v_counter>0 then
      v_html:='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""  xmlns="">';
      v_html:=v_html||'<head><meta http-equiv=Content-Type content=text/html;charset=gb2312></head>';
      v_html:=v_html||'<body>';
      v_html:=v_html||'<table style="border-collapse:collapse">';
      v_html:=v_html||'<tr>';
      v_html:=v_html||'<td style="border:1px solid black" >job</td><td style="border:1px solid black"  >SCHEMA_USER</td><td style="border:1px solid black" >LAST_DATE</td><td style="border:1px solid black" >FAILURES</td><td style="border:1px solid black" >BROKEN</td><td style="border:1px solid black" >INTERVAL</td><td style="border:1px solid black"  >WHAT</td>';
      v_html:=v_html||'</tr>';
      for mm in ( select job,SCHEMA_USER,to_char(LAST_DATE,'yyyy-mm-dd hh24:mi:ss') last_time,WHAT,INTERVAL,FAILURES,BROKEN from dba_jobs where failures>0)  loop
        v_html:=v_html||'<tr>';
        v_html:=v_html||'<td style="border:1px solid black" >'||mm.job||'</td><td style="border:1px solid black" >'||mm.SCHEMA_USER||'</td><td style="border:1px solid black" >'||mm.last_time||'</td><td style="border:1px solid black" >'||mm.FAILURES||'</td><td style="border:1px solid black" >'||mm.BROKEN||'</td><td style="border:1px solid black" >'||mm.INTERVAL||'</td><td style="border:1px solid black" >'||mm.WHAT||'</td>';
        v_html:=v_html||'</tr>';
      end loop;
      v_html:=v_html||'</table>';
      v_html:=v_html||'</body>';
      v_html:=v_html||'</html>';
begin
SEND_EMAIL  ('mdssysmail@mic.com.tw'
,'luxus.liao@mic.com.tw;woody.wu@mic.com.tw'
,'Job Check Failures>0 from MDSDB'
,v_html
,'eagle.zhou@mic.com.tw'
,'luxus.liao@mic.com.tw'
,  'text/html;charset=gb2312'
, '10.98.0.165'
, 25);
end;
end if;
exception when others then
  dbms_output.put_line(sqlcode);
  rollback;
end;














心得:
1.一開始想在begin後輸入for vv in ( select failures from dba_jobs) loop 再if vv.failures>0,發現這樣不行,因為一個迴圈裡面再出現另一個迴圈如下,發現發郵件的SEND_EMAIL不知道放在什麼位置,因為SEND_EMAIL只能放在最後一個迴圈裡面
for mm in ( select job,SCHEMA_USER,to_char(LAST_DATE,'yyyy-mm-dd hh24:mi:ss') last_time,WHAT,INTERVAL,FAILURES,BROKEN from dba_jobs where failures>0)  loop
        v_html:=v_html||'<tr>';
        v_html:=v_html||'<td style="border:1px solid black" >'||mm.job||'</td><td style="border:1px solid black" >'||mm.SCHEMA_USER||'</td><td style="border:1px solid black" >'||mm.last_time||'</td><td style="border:1px solid black" >'||mm.FAILURES||'</td><td style="border:1px solid black" >'||mm.BROKEN||'</td><td style="border:1px solid black" >'||mm.INTERVAL||'</td><td style="border:1px solid black" >'||mm.WHAT||'</td>';
        v_html:=v_html||'</tr>';
      end loop;
2.如果把SEND_EMAIL放在第一個迴圈裡面,則第一個迴圈有多少次,則傳送多少次郵件
3.如果把SEND_EMAIL放在第一個迴圈裡面的第二個迴圈,則郵件傳送的內容是第一個迴圈的最後一次的第二個迴圈裡面的所有次數,相當於第一個迴圈沒有意義,取的是第一個迴圈的最後一次
4.如果只有第一個迴圈,沒有第二個迴圈,且SEND_EMAIL放在第一個迴圈裡面,則第一個迴圈有多少次,則傳送多少次郵件,且郵件內容只有表格標題和每次迴圈的一行表格內容,即結果不會出現一行表格標題和多行表格內容

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2139887/,如需轉載,請註明出處,否則將追究法律責任。

相關文章