oracle jobs 导出为执行脚本

来源:互联网 发布:java设计模式视频 编辑:程序博客网 时间:2024/06/05 16:39

/*oracle jobs 导出为执行脚本

  就是把user_jobs或dba_jobs,导成DBMS_JOB.SUBMIT可以插入job的格式
  其中user_jobs是当前用户的job,dba_jobs则是全部
  下面只是随便整理了下,可以按照个人需要修改

 设置  file_dir  file_name 参数
 导出文件内容如最后附所视

 局限性 要设置utl_file_dir(alter system set utl_file_dir=) ,file_dir要包括在
 文件生成在服务端

 其实可以封装成过程,或把结果存入临时表,或dbms_output.put_line

  edit by inreyou 14:41 2007-11-16
*/

Declare
  f         utl_file.file_type;
  jobn      integer;
  s         varchar2(4000);
  file_dir  varchar(100);--目录
  file_name varchar(100);--文件名

begin
  file_dir  := 'd:/temp';
  file_name := 'utl_file1.sql';

  f := utl_file.fopen(file_dir, file_name, 'w');

  s := 'declare' || chr(13) || chr(10) || ' jobno number;' || chr(13) ||
       chr(10) || 'snd varchar2(20);' || chr(13) || chr(10) || 'begin';
  utl_file.put_line(f, s);
  --if export all jobs change user_jobs to dba_jobs
  for js in (select job, log_user, next_date, broken, interval, what
               from user_jobs) loop
    --dbms_job.user_export(y,s) 这种格式导出作业号插入不好处理
    s := 'execute immediate ''select to_char(' || js.interval ||
         ',''||chr(39)
     ||''yyyy-mm-dd hh24:mi:ss''||chr(39)||'') from dual'' into snd;';
 
    s := S || chr(13) || chr(10) || 'DBMS_JOB.SUBMIT(jobno, ' || chr(39) ||
         js.what || chr(39) || ',to_date(snd,' || chr(39) ||
         'yyyy-mm-dd hh24:mi:ss' || chr(39) || ')' || ',' || chr(39) ||
         js.interval || chr(39) || ');' || chr(13) || chr(10);
    utl_file.put_line(f, s);
 
  --s:='dbms_job.run(jobno);';
  --utl_file.put_line(f,s);
 
  end loop;
  s := 'commit;' || chr(13) || chr(10) || 'end;';
  utl_file.put_line(f, s);
  utl_file.fclose(f);
end;


/*

declare

 jobno number;

snd varchar2(20);

begin
execute immediate 'select to_char(TRUNC(SYSDATE) + 97 / 96,'||chr(39)
     ||'yyyy-mm-dd hh24:mi:ss'||chr(39)||') from dual' into snd;

DBMS_JOB.SUBMIT(jobno, 'TK_HAND.TKSP_PRE_HAND_INPUT;TK_HAND.TKSP_PRE_HAND_FINANCE;TK_HAND.TKSP_ACC_HAND_IN_ACC;',to_date(snd,'yyyy-mm-dd hh24:mi:ss'),'TRUNC(SYSDATE) + 97 / 96');


execute immediate 'select to_char(TRUNC(SYSDATE) + 97 / 96,'||chr(39)
     ||'yyyy-mm-dd hh24:mi:ss'||chr(39)||') from dual' into snd;

DBMS_JOB.SUBMIT(jobno, 'begin null;end;',to_date(snd,'yyyy-mm-dd hh24:mi:ss'),'TRUNC(SYSDATE) + 97 / 96');


execute immediate 'select to_char(TRUNC(SYSDATE) + 97 / 96,'||chr(39)
     ||'yyyy-mm-dd hh24:mi:ss'||chr(39)||') from dual' into snd;

DBMS_JOB.SUBMIT(jobno, 'TK_HAND.TKSP_PRE_HAND_INPUT;TK_HAND.TKSP_PRE_HAND_FINANCE;TK_HAND.TKSP_ACC_HAND_IN_ACC;',to_date(snd,'yyyy-mm-dd hh24:mi:ss'),'TRUNC(SYSDATE) + 97 / 96');


commit;

end;
*/

原创粉丝点击