背景:搞些監控腳本SHELL 后發現 每天登上服務器很麻煩,而且服務器越來越多了。 本來想用系統SendMail功能發,可公司說為了安全不可以。只好用應用系統發郵件功能! 然而該功能的郵件表內容是CLOB字段。 從蓋國強 前輩網站看到的 http://www.eygle.com/arch
背景:搞些監控腳本SHELL 后發現 每天登上服務器很麻煩,而且服務器越來越多了。
本來想用系統SendMail功能發,可公司說為了安全不可以。只好用應用系統發郵件功能!
然而該功能的郵件表內容是CLOB字段。
從蓋國強 前輩網站看到的 http://www.eygle.com/archives/2005/08/ecieoadbms_lobo.html 按其上面做,最后發出來的郵件全是亂碼!
用Linux export LANG=en_US.UTF8 也不行!
過了幾天發現有dbms_lob包有額loadclobfrom file過程。而上面是使用loadfromfile過程 默認是裝進二進制流,沒有做字符轉換。
上面介紹windows平臺下先要把文本文件保存為unicode編碼。在linux平臺下如何用vi保存unicode呢? 如何 sh xxxx.sh > xxx.log呢?
討厭死了Linux 每個小問題都搞賊復雜,轉了一圈又一圈。vi ~/.vimrc 編入啥。。然后iconve。。
那我就不給你們兜圈子了 順序的來下
第一步 檢查 你的系統中的文件類型是什么?
[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
第三步 創建目錄對象在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'); --獲得數據庫字符集編碼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 聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com