我写了一个存储过程,如下: 
CREATE OR REPLACE PROCEDURE SP_TEST_XML( 
    ze_no        in VARCHAR) 
IS 
  path              varchar2(100); 
  file_name          VARCHAR2(50); 
  doc                dbms_xmldom.DOMDocument; 
 begin 
...... 
  file_name := 'ze'||To_Char(sysdate,'yyyyMMdd')||'.xml'; 
  path := '/u2/oracle/tmp/'||file_name; 
  dbms_xmlDom.writeToFile(doc,file_name,'UTF-8'); 
  dbms_xmlDom.freeDocument(doc); 
end SP_TEST_XML; 
编译通过了,但是执行到dbms_xmlDom.writeToFile(doc,file_name,'UTF-8');的时候报错,错误内容如下: 
ORA-29280: 目录路径无效 
ORA-06512: 在"SYS.UTL_FILE", line 18 
ORA-06512: 在"SYS.UTL_FILE", line 424 
ORA-06512: 在"XDB.DBMS_XSLPROCESSOR", line 58 
ORA-06512: 在"XDB.DBMS_XMLDOM", line 4128 
ORA-06512: 在"DS.SP_TEST_XML", line 59 
ORA-06512: 在line 3 在init.ora中设置了utl_file_dir=/u2/oracle/tmp,重新启动了数据库,还是报同样的错! 
权限是oracle用户的权限,我看了一下,情况是这样的: 
</u2/oracle>ls -l 
drwxrwxr-x  2 oracle oinstall 4096 Mar  4 11:14 tmp
请高手帮我看一下,到底是怎么回事,谢谢! 

解决方案 »

  1.   

    你需要在的过程编写前创建
      v_filepath      := 'WEIHUDATA';
     --v_sql:= 'create or replace directory WEIHUDATA as '/itf_ftp/upload/data';然后才能使用utl_file 包
      

  2.   

    不好意思啊,我没有明白了你的意思,v_filepath := 'WEIHUDATA';这句是写在存储过程里吗?
    v_sql:= 'create or replace directory WEIHUDATA as '/itf_ftp/upload/data'; 这句是写在存储过程里呢?还是写在那里?
    我在sqlplus 下直接执行了:
    SQL> create or replace directory WEIHUDATA as '/u2/oracle/tmp';
    Directory created.
    再执行存储过程还是不行呀!麻烦您详细说明,谢谢!