使用plsql Developer执行时,是否可以写入xls文件并打开文件?

时间:2020-08-10 09:46:13

标签: oracle plsqldeveloper utl-file

我有一个使用utl_file在Xls文件中写报告的过程。

此过程正常工作,但我的问题是:执行后是否可以直接在Excel中打开此文件?我之所以这样问,是因为当它现在执行时,我必须打开文件夹路径,然后打开Xls文件。

我的修改代码:

  create or replace procedure write_file_daily(emp_id in number,Start_date in  date,End_date in date, Job_Name in varchar2 ) is
 file_handle UTL_FILE.file_type;
begin
  file_handle := utl_file.fopen('CSV_DIR', 'REP.xls', 'W');
  utl_file.put_line(file_handle, 'id'||   CHR(9) || 'name' ||   CHR(9) || 'department' ||   CHR(9) || 'unit' || CHR(9) || 'position' ||   CHR(9) || 'job' 
    );
  for rws in (
    select ID,
       NAME,
       DEPARTMENT,
       UNIT,
       POSITION,
       JOB  
  from (select t.ID1  as ID,
               t.NAME as Name,
               (select d.divname from compdivs d where d.divid = t.COMP_id2) as DEPARTMENT, 
               decode((select d.parent1name from compdivs d where d.divid = t.COMP),
                       'XXX',
                       (select d.divname from compdivs d where d.divid = t.COMP),
                       (select d.parent1name from compdivs d where d.divid = t.COMP)) as UNIT,
               (select d.dname from const_dt d where d.mid = 3 and d.no = t.WORKK) as Position,
               (select d.dname from const_dt d where d.mid = 8 and d.no = t.EDUCATION_ID) as Job,
          from    th1 t  
      )
 WHERE ( ID = emp_id or  emp_id = -1)
  and (Day_date  between    Start_date   and   End_date    )
   and( NVL(lower(JOB),' ') like NVL(lower('%'||  Job_Name ||'%'),NVL(lower(JOB),' ')))  
   )

  loop
    utl_file.put_line(file_handle,  rws.id ||   CHR(9) || rws.name ||   CHR(9)  || rws.department ||   CHR(9) || rws.unit ||   CHR(9) || rws.position ||   CHR(9) || rws.job  
    );
  end loop;
  utl_file.fclose(file_handle);
  
end write_file_daily;

1 个答案:

答案 0 :(得分:1)

在我看来,您需要一种从PLSQL Developer中启动外部程序(在您的情况下为MS Excel)的功能,该功能由SQL / PLSQL脚本执行触发,最好将脚本结果作为输入参数。我可以想象这很酷,并且过去以这种方式进行了一些探索,但是不幸的是,PLSQL Developer似乎没有提供任何此类功能。

(注意,我的意思是客户端计算机,而不是数据库服务器。在数据库服务器端,有some ways来调用操作系统命令,但我希望它不适用于您的情况,因为您的数据库服务器可能与您的客户端计算机不同。)

相关问题