> 데이터 베이스 > MySQL 튜토리얼 > 终于搞定了从Linux下加载文本文件到数据库CLOB字段上

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

WBOY
풀어 주다: 2016-06-07 15:28:42
원래의
1528명이 탐색했습니다.

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿