Home  >  Article  >  Database  >  终于搞定了从Linux下加载文本文件到数据库CLOB字段上

终于搞定了从Linux下加载文本文件到数据库CLOB字段上

WBOY
WBOYOriginal
2016-06-07 15:28:421477browse

背景:搞些监控脚本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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn