declare
fd utl_file.file_type;
begin
fd := utl_file.fopen(:vdir, :vfile, 'A');
begin
utl_file.put_line(fd, 'sub2');
utl_file.put_line(fd, 'sub4');
utl_file.put_line(fd, 'sub5');
end;
utl_file.fclose(fd);
end;是很简单的代码,目标写入文件是个fifo文件。
执行后,光标在那一闪一闪,也不结束,也不报错,文件里也没被写入什么,怎么回事?

解决方案 »

  1.   

    确认目录正确性,确认文件正确性,是被锁了还是什么的。SQL> create directory tpath as 'e:\';目录已创建。
    SQL> declare
      2  fd utl_file.file_type;
      3  begin
      4     fd:=utl_file.fopen('TPATH','b.txt','a');
      5     utl_file.put(fd,'sub2');
      6     utl_file.put(fd,'sub3');
      7     utl_file.fclose(fd);
      8  end;
      9  /PL/SQL 过程已成功完成。
      

  2.   

    下面这个例子要注意还得给目录赋权:
    chmod 777 /d01/sql;
    --因/d01/sql目录的权限为drwxr-xr-x,其它用户没有写权限,而utl_file运行时的权限是oracle用户的权限,而不是当前登录用户的权限,utl_file不能写sql目录,所以需将
    sql目录加上o+w权限
    create or replace directory d_output  as '/d01/sql';
    grant all on directory d_output to 当前用户名或者public;create or replace procedure first is
      vfile utl_file.file_type;
    begin
      vfile := utl_file.fopen('D_OUTPUT','hello.txt','w', 32767);
      utl_file.put_line(vfile, 'hello');
      utl_file.put_line(vfile,'world');
      utl_file.fflush(vfile);
      utl_file.fclose(vfile);
    end;
    /
    exec first;
      

  3.   

    谢谢楼上几位,这些我都注意了。补充一下,往普通文件里写,是没有问题的,但是往同路径下的一个fifo文件里写的时候,无反应。
    欢迎有经验的来支援
      

  4.   

    utl_file.fremove(TPATH,fb);先把这个文件干掉
      

  5.   

    我已经知道是为什么了,谢谢大家。我把答案写出来 ,和大家分享一下:fifo文件的特性决定的,光标停在那一闪一闪的是正常的!
    管道处于写打开状态。当你把文件内容读出后,管道释放,然后才能正常终了。困扰了我两天,呵呵,希望对有需要的人有帮助吧