从存储过程生成excel文件而不在oracle中创建目录

时间:2017-08-30 11:28:02

标签: excel oracle stored-procedures directory

我有以下代码生成excel文件。我已经在我的本地机器上测试了它的wokring,我还在我的loacl机器数据库中在oracle中创建了目录。

但是现在因为我需要在生产中使用这个程序,由于安全原因我无法创建oracle目录,所以在这种情况下程序抛出错误

ORA-29280: invalid directory p  

有没有其他方法可以在特定文件夹中生成文件而无需在oracle中创建目录?

  Create or replace PROCEDURE test_report IS    
     lv_dir         VARCHAR2(4000);    
     lv_data_file   VARCHAR2(4000) := 'test_report' || '_' ||    
                                     to_char(SYSDATE, 'dd-Mon-yyyy') ||    
                                     '.csv';    
     lv_err_file    VARCHAR2(4000) := 'test_report' || '_' ||    
                                     to_char(SYSDATE, 'dd-Mon-yyyy') ||    
                                     '.csv';    
     lv_dfile       utl_file.file_type;    
     lv_efile       utl_file.file_type;    
     ln_err_cnt     NUMBER;    
     ln_prc_cnt     NUMBER;        

 BEGIN      

     lv_dir := 'C:\test\TEST_REPORT';    
     lv_dfile := utl_file.fopen(lv_dir, lv_data_file, 'W');    
     utl_file.fclose(lv_dfile);    
     utl_file.fclose(lv_efile);    



    EXCEPTION    
         WHEN OTHERS THEN    
          dbms_output.put_line(substr(sqlerrm,1,30));    
       END test_report;

1 个答案:

答案 0 :(得分:1)

简单回答:

为了使用Oracle数据库访问文件系统,Oracle提供了DIRECTORY。这样,Oracle还可以保持自身和所有文件访问功能独立于操作系统。

可能有解决方法。例如,Oracle APEX提供了一些方法,使最终用户能够从他的Web浏览器中下载BLOB作为文件,该文件已在数据库中生成。使用XDB,还可以将文件存储在数据库中类似目录的系统中。但是,据我所知,这不使用物理硬盘。

您可以编写一些Java行并在数据库中编译它,但是在Oracle数据库中没有使用Java,我假设为了访问文件系统,您还需要使用Oracle目录。 / p>