免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4359 | 回复: 12
打印 上一主题 下一主题

请教PL/SQL中文件操作的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-11 09:03 |只看该作者 |倒序浏览
在sqlplus 中 读取文件操作却提示:TEXT_IO 需要定义,
oracle 10g

DECLARE
IN_FILE        TEXT_IO.FILE_TYPE;
begin
   IN_FILE:=TEXT_IO.FOPEN('D:\abc\123.txt','R');
   TEXT_IO.FCLOSE(IN_FILE);
end;
/

IN_FILE  TEXT_IO.FILE_TYPE;
          *
第 2 行出现错误:
ORA-06550: line 2, column 11:
PLS-00201: identifier 'TEXT_IO.FILE_TYPE' must be declared
ORA-06550: line 2, column 11:
PL/SQL: Item ignored
ORA-06550: line 4, column 4:
PLS-00320: the declaration of the type of this expression is incomplete or
malformed
ORA-06550: line 4, column 4:
PL/SQL: Statement ignored
ORA-06550: line 5, column 19:
PLS-00320: the declaration of the type of this expression is incomplete or
malformed
ORA-06550: line 5, column 4:
PL/SQL: Statement ignored

这是怎么回事啊。。。。。。各位大侠帮帮我啊。。。。

论坛徽章:
0
2 [报告]
发表于 2006-10-11 09:25 |只看该作者
原帖由 gz_xuhaoz 于 2006-10-11 09:03 发表
在sqlplus 中 读取文件操作却提示:TEXT_IO 需要定义,
oracle 10g

DECLARE
IN_FILE        TEXT_IO.FILE_TYPE;
begin
   IN_FILE:=TEXT_IO.FOPEN('D:\abc\123.txt','R');
   TEXT_IO.FCLOSE(IN_FILE);
end;
...


TEXT_IO是Oracle Forms自带的package,在oracle pl/sql procedure中可以使用utl_file来代替。
注意两者生成文件的位置是不同的。

论坛徽章:
0
3 [报告]
发表于 2006-10-11 09:49 |只看该作者
create or replace directory F_PATH as '/home/zxh';

grant read on directory F_PATH to public;

DECLARE
        IN_FILE                UTL_FILE.FILE_TYPE;
begin
   IN_FILE:=UTL_FILE.FOPEN('F_PATH','ora_data.txt','w',2000);
   UTL_FILE.FCLOSE(IN_FILE);

end;

这种方法我也试过了,
提示是:
第 1 行出现错误:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 33
ORA-06512: at "SYS.UTL_FILE", line 460
ORA-29283: invalid file operation
ORA-06512: at line 4

是不是directory 要以sysdba的身份创建才行?

[ 本帖最后由 gz_xuhaoz 于 2006-10-11 09:56 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-10-11 09:58 |只看该作者
原帖由 gz_xuhaoz 于 2006-10-11 09:49 发表
create or replace directory F_PATH as '/home/zxh';

grant read on directory F_PATH to public;

DECLARE
        IN_FILE                UTL_FILE.FILE_TYPE;
begin
   IN_FILE:=UTL_FILE.FOPEN('F_PATH','ora_data.txt ...


对path只有read权限,怎么能用‘w’模式打开文件,应该使用'R'

论坛徽章:
0
5 [报告]
发表于 2006-10-11 10:27 |只看该作者
改成r 也不行哦。。。。
IN_FILE:=UTL_FILE.FOPEN('F_PATH','ora_data.txt','r',2000);

还是提示:
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 475
ORA-29283: invalid file operation
ORA-06512: at line 4

论坛徽章:
0
6 [报告]
发表于 2006-10-11 11:17 |只看该作者
原帖由 gz_xuhaoz 于 2006-10-11 10:27 发表
改成r 也不行哦。。。。
IN_FILE:=UTL_FILE.FOPEN('F_PATH','ora_data.txt','r',2000);

还是提示:
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 4 ...


ls -ltr /home/zxh---->oracle有读写/home/zxh权限?

论坛徽章:
0
7 [报告]
发表于 2006-10-11 11:38 |只看该作者
有权限读的,我加了所有用户可读的权限。
windows 我也试过了,也是报这样的错的。

论坛徽章:
0
8 [报告]
发表于 2006-10-11 12:15 |只看该作者
这个文件存在么?oracle用户可以修改这个文件么?可以在这个目录创建文件么?

[ 本帖最后由 blue_stone 于 2006-10-11 12:19 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-10-11 12:24 |只看该作者
原帖由 gz_xuhaoz 于 2006-10-11 11:38 发表
有权限读的,我加了所有用户可读的权限。
windows 我也试过了,也是报这样的错的。


1. /home/zxh oracle要有读写权限
2. 如果以'R'方式打开文件ora_data.txt,该文件必须存在,并且oracle有读写权限
3. grant read on directory xxx to xxx;

如果还有问题:
ls -ltr /home/zxh
ls -ltr /home/zxh/ora_data.txt
select  owner,directory_name,directory_path from dba_directories;

贴出结果

论坛徽章:
0
10 [报告]
发表于 2006-10-11 12:57 |只看该作者
zxh:/home :>ls -lrt
drwxr-xr--  11 zxh      dev            4096 Oct 11 11:24 zxh

zxh:/home/zxh :>l -lrt ora_data.txt
-rwxr-xr-x   1 zxh      dev             152 Aug 10 14:36 ora_data.txt

SQL> show user
USER 为 "TEST"

SQL> create or replace directory F_PATH as '/home/zxh';

目录已创建。

SQL> grant read,write on directory F_PATH to public;

授权成功。

SQL>  DECLARE
  2   IN_FILE  UTL_FILE.FILE_TYPE;
  3  begin
  4     IN_FILE:=UTL_FILE.FOPEN('F_PATH','ora_data.txt','R',2000);
  5     UTL_FILE.FCLOSE(IN_FILE);
  6  
  7  end;
  8  /
DECLARE
*
第 1 行出现错误:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 475
ORA-29283: invalid file operation
ORA-06512: at line 4


SQL>  select substr(owner,1,10) ,substr(DIRECTORY_NAME,1,10) name ,substr(DIRECTORY_PATH,1,40) path
  2  from dba_directories;

SUBSTR(OWNER,1,10)   NAME                 PATH
-------------------- -------------------- ------------------------------------------------------------
SYS                  ADMIN_DIR            /install/ksuriana/050630.0008/withoutsee
SYS                  DATA_PUMP_           /opt/oracle/oracle10g/rdbms/log/
SYS                  WORK_DIR             /install/ksuriana/050630.0008/withoutsee
SYS                  F_PATH               /home/zxh
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP