PL/SQL 怎么读写文件? 
文件是txt的 文件里面每行数据以tab分割我用utl_file去操作 为什么报path的错误
是不是要设置什么权限?

解决方案 »

  1.   

    在命令窗口(Commond Window)下输入start ,然后回车,系统会弹出一个窗口,你选择你的文件所在路径就可以了
    SQL> start
      

  2.   

    在命令窗口(Commond Window)下输入start ,然后回车,系统会弹出一个窗口,你选择你的文件所在路径就可以了
    SQL> start
    ??????????????????????????????????不明白这有什么用
      

  3.   

    path应该是你写在参数里的路径找不到文件,注意检查一下。
    基本写法: 
    declare
    vFileHandle    UTL_FILE.FILE_TYPE :=NULL;
    ...
    begin
    ....
    vFileHandle :=UTL_FILE.fopen(file_path,file_Name,'r');
    ...
      

  4.   

    用PB,里面有个 IMPORT,直接浏览文件,然后commit就可以了!
      

  5.   

    在Oracle操作文件必须事先设定Path
    语法:create directory 路径别名 as 'path_name'
    路径别名是在oracle中使用的别名,path_name是实际的物理路径。
    实现你需要有create any directory的权限。
      

  6.   

    然后UTL_FILE.fopen(file_path,file_Name,'r');
    里面的file_path不可以使用物理路径,应该使用上面定义的路径别名。
    可以理解为这是oracle的安全管理的一种机制
      

  7.   

    然后UTL_FILE.fopen(file_path,file_Name,'r');
    里面的file_path不可以使用物理路径,应该使用上面定义的路径别名。
    可以理解为这是oracle的安全管理的一种机制----------------------------------------file_path 应该在那里设置?我写在是写死了 d:\test就是报错找不到 这个目录
      

  8.   

    path应该是你写在参数里的路径找不到文件,注意检查一下。
    基本写法: 
    declare
    vFileHandle    UTL_FILE.FILE_TYPE :=NULL;
    ...
    begin
    ....
    vFileHandle :=UTL_FILE.fopen(file_path,file_Name,'r');
    -------------------------------------------------file_path怎么检查????? 我也是作为参数的  传进去d:\test再oracle服务器上面是由这个文件目录和文件夹的
      

  9.   

    忘记说了  我的数据库是 oracle10g
      

  10.   

    create or replace directory "路径别名" as '路径';
    grant read(write) on directory "路径别名" to public;过程中,直接引用路径别名就行了。
      

  11.   

    现在状况是这样的 数据库oracle10g R2SYSDBA权限用户下
    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请教各位 为什么。
      

  12.   

    调用的时候pReadFileTest('TMP'....)
    这个tmp需要大写,即使你是用小写创建的。
    估计LZ错在这里了。
      

  13.   

    调用的时候pReadFileTest('TMP'....)
    这个tmp需要大写,即使你是用小写创建的。
    估计LZ错在这里了。---------------------------------------我是用大写的  
    但是现在老是报
    INVALID OPERATION的错
      

  14.   

    在 init.ora 文件中增加:utl_file_dir="D:\test"

    utl_file_dir="D:\*"
      

  15.   

    --------onejune4450
    hhacker(梦) 感谢两位的回答 我现在oracle10g版本  MS针对这个版本对目录权限的配置 并不采用init.ora 的方法 而是用命令的方法 但是我都配置了 就是老报INVALID OPERATION错误
    望达人指点
      

  16.   

    http://community.csdn.net/help/GetUsablePoint.htm   bucuobucuo