oracle utl_file从哪里来的,oracle自带的操作文件的包UTL_FILE介绍

因开发要求,需要对oracle里的数据与数据文件作比较。如采用客户端连接oracle的方式则显得小题大做,且工作量大,不易维护。直接采用存储过程,调用UTL_FILE包的公共过程,显得方便得多。

首先,需要把数据文件所在的目录注册到oracle中,用create directory。。。语句,然后把此目录的read,write权限grant给develop user account。注意create directory语句所需要的权限,方便得话直接用dba用户创建directory。

其次,文件操作如同C,C++,JAVA等高级语言差不多,主要有这几个方法:

UTL_FILE.fopen(d_output,v_filename,'r',32767);--32767很关键,如果文件一行的字节数过大,不指定这个参数,oracle只会读入最长默认长度的字符串,以至一行文本当成了“两行”读。

UTL_FILE.get_line(FILE_HANDLE,v_text);

UTL_FILE.put_line(FILE_HANDLE,v_text);

UTL_FILE.fclose(FILE_HANDLE);

对于要操作xls文件,一行数据采用chr(13)||chr(10)分割每列的数据。缺点是无法进行xls单元格的一些格式化,以及单元格合并等操作。因此虽然oracle有操作xls的基本功能,但只能完成最基本的功能。

最后,就是字符集的问题了,上面提到的get_line函数,是以字节为单位的,oracle也有按照双字节来处理的。但是对于UTF-8的文本,某些汉字的编码是三个字节,如果其中一个字节为OA,或OD,oracle就会误认为此行已经终止,这样也会把原本一行的内容当成“两行”来读取。oracle的字符集为简体中文,可能是oracle服务端的字符集不是UTF-8才导致这个问题,还是说oracle本身就存在这个问题,还有待确认下!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值