再请问大家一个问题,我能否把以下代码作为一个存储过程来处理,然后再用作业调用这个存储过程,每天下午四点执行这个作业
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
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
一个是利用操作系统的情时触发功能,执行一个批命令来实现。
另一个是使用Job调用存储过程,然后用UTL_FILE报来实现写文件的工作。第一种实现需要依赖于特定的操作系统
第二种虽然不需要依赖于操作系统但是稍微复杂,而且需要吸入文件的路径在已经定义的directory里面。
一个是利用操作系统的情时触发功能,执行一个批命令来实现。
另一个是使用Job调用存储过程,然后用UTL_FILE报来实现写文件的工作。第一种实现需要依赖于特定的操作系统
第二种虽然不需要依赖于操作系统但是稍微复杂,而且需要吸入文件的路径在已经定义的directory里面。
-----------------------------------------------------------------------------这也是业务的需求,数据是存在数据库中的,只是想有规律定时导出所需要的数据以文件的形式存放;第一种需要开通task scheduler服务本人感觉不安全;
本人就是想使用第二方法来实现,但不知方法,请帮忙
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,执行此过程就可以了。