视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
终于搞定了从Linux下加载文本文件到数据库CLOB字段上
2020-11-09 07:34:54 责编:小采
文档


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

下载本文
显示全文
专题