oracle读取文件29283,ORACLE读写文件

运用UTL_FILE包进行文件的读写操作

读文件的操作如下

步骤1:在oracle数据库中创建文件目录

SQL>create or replace directory ORADIR_HY  as '/home/qaadmin/';(如果登录的oracle用户没有创建目录的权限,则需要先授权

授权语句:Grant create  any directory to mengxm;)

步骤2:目录创建以后,就可以把读写权限授予登录用户

SQL>GRANT WRITE,READ ON DIRECTORY ORADIR TO mengxm;

步骤3:授权给登录oracle的用户使用utl_file包的权限(可能当前登录的用户没有使用utl——file的权限)

SQL>GRANT EXECUTE ON  utl_file  TO  sharedb;

步骤4:创建过程进行文件的读取

CREATE OR REPLACE PROCEDURE HY_1126 IS

ASTRLINE VARCHAR2(26494);

OUT_FILE UTL_FILE.FILE_TYPE;--定义一个文件类型

BEGIN

OUT_FILE := UTL_FILE.FOPEN('ORADIR_HY', 'hy.txt', 'R');--打开指定目录的文件。ORADIR_HY是文件所在的目录,hy.txt是要读取的文件,R文件写入的模式 W:写,文件不存在则创建,会覆盖 A:追加 R:读  注意:这里的ORADIR_HY需要用单引号引起来

LOOP

BEGIN

UTL_FILE.GET_LINE(OUT_FILE, ASTRLINE);--从OUT_FILE句柄中循环取得数据放入ASTRLINE变量中

DBMS_OUTPUT.PUT_LINE(ASTRLINE);--打印读出来的内容

EXCEPTION

WHEN OTHERS THEN

EXIT;

END;

END LOOP;

UTL_FILE.FCLOSE(OUT_FILE);

END;

/

编译完毕后,调用出现下面的错误

SQL> exec HY_1126;

begin HY_1126; end;

ORA-29283: invalid file operation

ORA-06512: at "SYS.UTL_FILE", line 536

ORA-29283: invalid file operation

ORA-06512: at "CNLOG.HY_1126", line 5

ORA-06512: at line 1

解决办法:

原因1:可能是目录不存在。可尝试如下的操作进行检查

SQL> create or replace directory ORADIR_HY   as '/home/qaadmin/';

Directory created.

SQL> host ls /home/qaadmin

/home/oracle/testdump not found

可以看到是目录不存在导致的,此时建立目录就OK

如果目录已经存在,还报如上的错误,那原因很可能就是没有设置utl_file包的可操作目录所致

原因2:没有设置utl_file的可操作目录。可设置utl_file的可操作目录后重新执行程序

SQL>alter system set utl_file_dir='/home/qaadmin/' scope=spfile;

SQL>exec HY_1126;

HELLO,I'M FROM FILE!

OK,成功了~

在过程中直接指定文件目录也是可以的。

将这句代码OUT_FILE := UTL_FILE.FOPEN('ORADIR_HY', 'hy.txt', 'R');

替换成

OUT_FILE := UTL_FILE.FOPEN('/home/qaadmin/, 'hy.txt', 'R');也是可以的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值