再请问大家一个问题,我能否把以下代码作为一个存储过程来处理,然后再用作业调用这个存储过程,每天下午四点执行这个作业
set heading off
set termout off
set pages 0
set feedback off
spool c:\aa.csv
select trim(aa)||','||trim(bb)||','||trim(cc)||','||trim(dd)||','||trim(ee) from GS12 where aa='11';
spool off

解决方案 »

  1.   

    这样的操作不能放在数据库中建立一个job把
      

  2.   

    两条路
    一个是利用操作系统的情时触发功能,执行一个批命令来实现。
    另一个是使用Job调用存储过程,然后用UTL_FILE报来实现写文件的工作。第一种实现需要依赖于特定的操作系统
    第二种虽然不需要依赖于操作系统但是稍微复杂,而且需要吸入文件的路径在已经定义的directory里面。
      

  3.   

    两条路
    一个是利用操作系统的情时触发功能,执行一个批命令来实现。
    另一个是使用Job调用存储过程,然后用UTL_FILE报来实现写文件的工作。第一种实现需要依赖于特定的操作系统
    第二种虽然不需要依赖于操作系统但是稍微复杂,而且需要吸入文件的路径在已经定义的directory里面。
    -----------------------------------------------------------------------------这也是业务的需求,数据是存在数据库中的,只是想有规律定时导出所需要的数据以文件的形式存放;第一种需要开通task scheduler服务本人感觉不安全;
    本人就是想使用第二方法来实现,但不知方法,请帮忙
      

  4.   

    CREATE OR REPLACE PROCEDURE hp_write_wltxt(p_dir in varchar2)
    iS
    file_handle utl_file.file_type;
    Write_file_name VARCHAR2(50);
    scode    VARCHAR2(50);
    spayno   VARCHAR2(50);
    BEGIN
    write_file_name := 'db_alert.log';
    dbms_output.put_line(p_dir||Write_file_name);
    file_handle := utl_file.fopen(p_dir,write_file_name,'a');
    declare 
      cursor mycursor 
      is 
       select tag_code||chr(9),item_code||chr(9)
       from a;
       begin
       open mycursor;
         loop 
         fetch mycursor into scode,spayno;
         exit when mycursor%notfound;
           utl_file.put(file_handle,scode);
           utl_file.put_line(file_handle,spayno);
        end loop; 
      close mycursor;
      end;--close file
    utl_file.fclose(file_handle);
    EXCEPTION
    WHEN OTHERS THEN
    BEGIN
    DBMS_OUTPUT.PUT_LINE('OTHER ERROR='||SQLERRM);end;
    end;再建立一个job,执行此过程就可以了。