背景:搞些監(jiān)控腳本SHELL 后發(fā)現(xiàn) 每天登上服務(wù)器很麻煩,而且服務(wù)器越來越多了。 本來想用系統(tǒng)SendMail功能發(fā),可公司說為了安全不可以。只好用應(yīng)用系統(tǒng)發(fā)郵件功能! 然而該功能的郵件表內(nèi)容是CLOB字段。 從蓋國強(qiáng) 前輩網(wǎng)站看到的 http://www.eygle.com/arch
背景:搞些監(jiān)控腳本SHELL 后發(fā)現(xiàn) 每天登上服務(wù)器很麻煩,而且服務(wù)器越來越多了。
本來想用系統(tǒng)SendMail功能發(fā),可公司說為了安全不可以。只好用應(yīng)用系統(tǒng)發(fā)郵件功能!
然而該功能的郵件表內(nèi)容是CLOB字段。
從蓋國強(qiáng) 前輩網(wǎng)站看到的 http://www.eygle.com/archives/2005/08/ecieoadbms_lobo.html 按其上面做,最后發(fā)出來的郵件全是亂碼!
用Linux export LANG=en_US.UTF8 也不行!
過了幾天發(fā)現(xiàn)有dbms_lob包有額loadclobfrom file過程。而上面是使用loadfromfile過程 默認(rèn)是裝進(jìn)二進(jìn)制流,沒有做字符轉(zhuǎn)換。
上面介紹windows平臺下先要把文本文件保存為unicode編碼。在linux平臺下如何用vi保存unicode呢? 如何 sh xxxx.sh > xxx.log呢?
討厭死了Linux 每個小問題都搞賊復(fù)雜,轉(zhuǎn)了一圈又一圈。vi ~/.vimrc 編入啥。。然后iconve。。
那我就不給你們兜圈子了 順序的來下
第一步 檢查 你的系統(tǒng)中的文件類型是什么?
[oracle@DB-DG dbscripts]file -i unix2dos.c
第二步 檢查ORACLE字符集編碼
SELECT Nls_Charset_Id(Value) ,Value FROM V$NLS_VALID_VALUES WHERE parameter = 'CHARACTERSET';
1 US7ASCII
第三步 創(chuàng)建目錄對象在ORACLE某個用戶下
#CLOB_DIR="/home/oracle/dbscripts/logs"
第四步 編寫插入SHELL腳本
#!/bin/bash
chartset=$1
#CLOB_DIR="/home/oracle/dbscripts/logs"
sqlplus -s $username/$pass < declare charset_id := NLS_CHARSET_ID('US7ASCII'); --獲得數(shù)據(jù)庫字符集編碼ID -- charset_id:=NLS_CHARSET_ID('$charset'); l_bfile := bfilename('CLOB_DIR','EveryDayReport.txt'); --獲得文件句柄 -- l_bfile := bfilename('CLOB_DIR','$FileName'); dbms_lob.loadclobfromfile(l_clob,l_bfile,dbms_lob.getlength(l_bfile), src_offset,dst_offset,charset_id,lang_ctx,warning); dbms_lob.fileclose(l_bfile); exception when others then exit; EOF 聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com