PL/SQL 怎么读写文件?

usacogate 2007-05-08 10:17:29
PL/SQL 怎么读写文件?
文件是txt的 文件里面每行数据以tab分割

我用utl_file去操作 为什么报path的错误
是不是要设置什么权限?
...全文
652 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wo1273936998 2012-10-19
  • 打赏
  • 举报
回复
http://community.csdn.net/help/GetUsablePoint.htm bucuobucuo
usacogate 2007-05-15
  • 打赏
  • 举报
回复
问题暂时解决了 错误原因还是 权限配置的问题 感谢各位
usacogate 2007-05-14
  • 打赏
  • 举报
回复
--------onejune4450
hhacker(梦)

感谢两位的回答

我现在oracle10g版本 MS针对这个版本对目录权限的配置 并不采用init.ora 的方法

而是用命令的方法 但是我都配置了 就是老报INVALID OPERATION错误


望达人指点。。。。。。
hhacker 2007-05-13
  • 打赏
  • 举报
回复
还应该注意用户对该目录的可读写权限
onejune4450 2007-05-11
  • 打赏
  • 举报
回复
在 init.ora 文件中增加:

utl_file_dir="D:\test"

utl_file_dir="D:\*"
usacogate 2007-05-10
  • 打赏
  • 举报
回复
调用的时候pReadFileTest('TMP'....)
这个tmp需要大写,即使你是用小写创建的。
估计LZ错在这里了。

---------------------------------------

我是用大写的
但是现在老是报
INVALID OPERATION的错
usacogate 2007-05-09
  • 打赏
  • 举报
回复
现在状况是这样的

数据库oracle10g R2

SYSDBA权限用户下
create or replace directory TMP as 'd:\test';
grant read on directory TMP to public;
grant write on directory TMP to public;

PROCEDURE pReadFileTest(
FPATH IN STRING,
FNAME IN STRING,
MAX_NUM IN NUMBER
)
IS
FILE_HANDLE UTL_FILE.FILE_TYPE;
TEXT_BUFFER STRING(1000);
LINE_NUM NUMBER;

BEGIN

DBMS_OUTPUT.PUT_LINE('INPUT PATH='||FPATH);
DBMS_OUTPUT.PUT_LINE('INPUT FILENAME='||FNAME);
LINE_NUM :=0;

BEGIN
FILE_HANDLE := UTL_FILE.FOPEN(FPATH, FNAME, 'R', MAX_NUM);
LOOP
LINE_NUM:= LINE_NUM + 1;
UTL_FILE.GET_LINE(FILE_HANDLE,TEXT_BUFFER);
DBMS_OUTPUT.PUT_LINE('LINE'||LINE_NUM||' : '||TEXT_BUFFER);
END LOOP;

EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN;
WHEN UTL_FILE.INVALID_PATH THEN
DBMS_OUTPUT.PUT_LINE('INVALID PATH');
WHEN UTL_FILE.INVALID_MODE THEN
DBMS_OUTPUT.PUT_LINE('INVALID MODE');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
DBMS_OUTPUT.PUT_LINE('INVALID FILEHANDLE');
WHEN UTL_FILE.INVALID_OPERATION THEN
DBMS_OUTPUT.PUT_LINE('INVALID OPERATION');
WHEN UTL_FILE.READ_ERROR THEN
DBMS_OUTPUT.PUT_LINE('READ ERROR');
WHEN UTL_FILE.WRITE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('WRITE ERROR');
WHEN UTL_FILE.INTERNAL_ERROR THEN
DBMS_OUTPUT.PUT_LINE('INTERNAL ERROR');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('OTHER ERROR='||SQLERRM);

END pReadFileTest;

然后调试的时候 用别名作为参数传入 报错INVALID_OPERATION

请教各位 为什么。。。。。。。
jdsnhan 2007-05-09
  • 打赏
  • 举报
回复
create or replace directory "路径别名" as '路径';
grant read(write) on directory "路径别名" to public;

过程中,直接引用路径别名就行了。



usacogate 2007-05-09
  • 打赏
  • 举报
回复
忘记说了 我的数据库是 oracle10g
usacogate 2007-05-09
  • 打赏
  • 举报
回复
path应该是你写在参数里的路径找不到文件,注意检查一下。
基本写法:
declare
vFileHandle UTL_FILE.FILE_TYPE :=NULL;
...
begin
....
vFileHandle :=UTL_FILE.fopen(file_path,file_Name,'r');
-------------------------------------------------

file_path怎么检查????? 我也是作为参数的 传进去d:\test

再oracle服务器上面是由这个文件目录和文件夹的
usacogate 2007-05-09
  • 打赏
  • 举报
回复
然后UTL_FILE.fopen(file_path,file_Name,'r');
里面的file_path不可以使用物理路径,应该使用上面定义的路径别名。
可以理解为这是oracle的安全管理的一种机制

----------------------------------------

file_path 应该在那里设置?

我写在是写死了 d:\test

就是报错找不到 这个目录
doer_ljy 2007-05-09
  • 打赏
  • 举报
回复
然后UTL_FILE.fopen(file_path,file_Name,'r');
里面的file_path不可以使用物理路径,应该使用上面定义的路径别名。
可以理解为这是oracle的安全管理的一种机制
doer_ljy 2007-05-09
  • 打赏
  • 举报
回复
在Oracle操作文件必须事先设定Path
语法:create directory 路径别名 as 'path_name'
路径别名是在oracle中使用的别名,path_name是实际的物理路径。
实现你需要有create any directory的权限。
doer_ljy 2007-05-09
  • 打赏
  • 举报
回复
调用的时候pReadFileTest('TMP'....)
这个tmp需要大写,即使你是用小写创建的。
估计LZ错在这里了。
usacogate 2007-05-08
  • 打赏
  • 举报
回复
在命令窗口(Commond Window)下输入start ,然后回车,系统会弹出一个窗口,你选择你的文件所在路径就可以了
SQL> start
??????????????????????????????????

不明白这有什么用
chufeng_007 2007-05-08
  • 打赏
  • 举报
回复
在命令窗口(Commond Window)下输入start ,然后回车,系统会弹出一个窗口,你选择你的文件所在路径就可以了
SQL> start
HelloWorld_001 2007-05-08
  • 打赏
  • 举报
回复
用PB,里面有个 IMPORT,直接浏览文件,然后commit就可以了!
yuyu1980 2007-05-08
  • 打赏
  • 举报
回复
SQL> start C:\sql.txt
wfeng7907 2007-05-08
  • 打赏
  • 举报
回复
path应该是你写在参数里的路径找不到文件,注意检查一下。
基本写法:
declare
vFileHandle UTL_FILE.FILE_TYPE :=NULL;
...
begin
....
vFileHandle :=UTL_FILE.fopen(file_path,file_Name,'r');
...

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧