首頁 資料庫 mysql教程 Linux下Oracle查询结果以html格式定期发送邮件

Linux下Oracle查询结果以html格式定期发送邮件

Jun 07, 2016 pm 04:58 PM
oracle

任务: 每天早上8:00将oracle查询语句的内容变成html的形式,制作一脚本,在指定时间用mutt自动发送到邮箱版本: Linux version

任务: 每天早上8:00将Oracle查询语句的内容变成html的形式,制作一脚本,在指定时间用mutt自动发送到邮箱

版本: Linux version 2.6.18-194.el5

Oracle Release 10.2.0.5.0

使用工具:shell 脚本

mutt 邮件代理

sendmail

crontab 自动任务处理 

一 shell脚本(生成html文件,mutt发送)

1 生成html文件

利用行列转换的sql语句,,将sys用户下的tb表(表-1)形式转化为表-2,并生成html1.html文件

表-1

NAME       COURSE          SCORE
---------- ---------- ----------
chen       chinese            74
chen       math                 99
chen       physics            88
ck          chinese            78
ck          math                 89
ck          physics            98

表-2
NAME                     chinese              math         physics            totle                avg
---------- ---------- ---------- ---------- ---------- ----------
chen                              74                  99                 88                261                  87
ck                                 78                  89                 98                265              88.33

使用的select语句(行列转换)

select name,sum(decode(course,'chinese',score,0)) "chinese",sum(decode(course,'math',score,0)) "math",sum(decode(course,'physics',score,0)) "physics",sum(score) "totle",round(avg(score),2) "avg" from tb group by name;


生成html文件

#设置生成表格式

set pagesize 0

set term off

set feedback off

set linesize 1000

set trimspool on

set term off verify off feedback off pagesize 999     

#开启生成html文件

set markup html on entmap on spool on head "

Grade of Students "

set echo off

spool /home/oracle/html1.html replace

select name,sum(decode(course,'chinese',score,0)) "chinese",sum(decode(course,'math',score,0)) "math",sum(decode(course,'physics',score,0)) "physics",su m(score) totle,round(avg(score),2) avg from tb group by name;

spool off

set markup html off

set echo on

2 使用mutt发送

echo cklovely@vip.qq.com > /tmp/user.txt --需要发送的邮件

echo “test”|mutt -s “subject name” -a /home/oracle/html1.html `cat /tmp/user.txt`


说明:-s 邮件的题目 -a 添加附件 最后是添加发送的邮箱地址


注意:此处默认发件箱是本机 root@localhost.localdomain,而值得一提的是,必须要在sendmail运行的行况下才可以发送

  a   关于sendmail启动缓慢的问题

    这是个比较常见的问题,出现这个问题的根本原因是主机名没有分配好

解决办法:

    我们可以修改系统配置文件/etc/hosts 和/etc/resolv.conf

    让sendmial绕过查询远程主机,这里给出一种最简单的方法,给主机设置一个别名

        修改/etc/hosts ,未修改之前

     127.0.0.1 localhost.localdomain localhost

        修改成

     127.0.0.1 localhost.localdomain localhost cklovely


  b    如果不需要从 root@localhost.localdomain 中发送邮件,可以选择从哪个邮箱发送,在/etc/Muttrc中添加一行

     my_hdr from: ckQyanqi@126.com


3 完成html.sh脚本

cat /home/oracle/html.sh

#!/bin/bash

source ~oracle/.bash_profile

$ORACLE_HOME/bin/sqlplus -s "/ as sysdba"

set pagesize 0

set term off

set feedback off

set linesize 1000

set trimspool on

set term off verify off feedback off pagesize 999

set markup html on entmap on spool on head "

Grade of Students "

set echo off

spool /home/oracle/html1.html replace

select name,sum(decode(course,'chinese',score,0)) "chinese",sum(decode(course,'math',score,0)) "math",sum(decode(course,'physics',score,0)) "physics",sum(score) totle,round(avg(score),2) avg from tb group by name;

spool off

set markup html off

set echo on

E

echo cklovely@vip.qq.com > /tmp/user.txt

echo "test"|mutt -s "Grade of Students" -a /home/oracle/html1.html `cat /tmp/user.txt`


   二   系统自动按时发送

    定义时间让系统自动运行脚本的方法很多

    而在linux系统中经常使用的要数crontab了。

    (其他的方法有:oracle中的dbms_jobs,还有就是dbms_scheduler)

    /etc/cron.deny:
       將不可以使用 crontab 的帳號寫入其中,若未記錄到這個檔案當中的使用者,就可以使用 crontab 。


    运行crontab有2种方法:

   1 直接用crontab命令

    當使用者使用 crontab 這個指令來建立工作排程之後,該項工作就會被紀錄到 /var/spool/cron/ 裡面去了,而且是以帳號來作為判別的。另外, cron 執行的每一項工作都會被紀錄到 /var/log/cron 這個登錄檔中,所以囉,如果你的 Linux 不知道有否被植入木馬時,也可以搜尋一下 /var/log/cron 這個登錄檔呢!

    Crontab语法:

     crontab [-u username] [-l|-e|-r]

     croutab -e (默认username为root)打开/var/spool/cron/root 编辑

     croutab -l (默认 username 为root)查看root用户下的自动任务

     croutab -r (默认 username 为root)删除root下所有的自动任务

    编辑内容:

       * * * * * command


代表意義 分鐘 小時 日期 月份 週 指令

數字範圍 0-59 0-23 1-31 1-12 0-7 命令或脚本

特殊字符 代表意義

*(星號) 代表任何時刻都接受的意思!舉例來說,範例一內那個日、月、週都是 * , 就代表著『不論何月、何日的禮拜幾的 12:00 都執行後續指令』的意思!

,(逗號) 代表分隔時段的意思。舉例來說,如果要下達的工作是 3:00 與 6:00 時,就會是: 0 3,6 * * * command時間參數還是有五欄,不過第二欄是 3,6 ,代表 3 與 6 都適用!

-(減號) 代表一段時間範圍內,舉例來說, 8 點到 12 點之間的每小時的 20 分都進行一項工作: 20 8-12 * * * command仔細看到第二欄變成 8-12 喔!代表 8,9,10,11,12 都適用的意思!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

oracle中計算兩個日期之間天數的函數 oracle中計算兩個日期之間天數的函數 May 08, 2024 pm 07:45 PM

oracle中計算兩個日期之間天數的函數

oracle資料庫日誌會保存多久 oracle資料庫日誌會保存多久 May 10, 2024 am 03:27 AM

oracle資料庫日誌會保存多久

oracle資料庫啟動步驟順序為 oracle資料庫啟動步驟順序為 May 10, 2024 am 01:48 AM

oracle資料庫啟動步驟順序為

oracle中interval的用法 oracle中interval的用法 May 08, 2024 pm 07:54 PM

oracle中interval的用法

oracle中某個字元出現的次數怎麼看出來 oracle中某個字元出現的次數怎麼看出來 May 09, 2024 pm 09:33 PM

oracle中某個字元出現的次數怎麼看出來

oracle中如何判斷包含兩個字串 oracle中如何判斷包含兩個字串 May 08, 2024 pm 07:00 PM

oracle中如何判斷包含兩個字串

oracle資料庫伺服器硬體配置需求 oracle資料庫伺服器硬體配置需求 May 10, 2024 am 04:00 AM

oracle資料庫伺服器硬體配置需求

oracle需要多少內存 oracle需要多少內存 May 10, 2024 am 04:12 AM

oracle需要多少內存

See all articles