请问各位Oracle侠客,
   能否使用触发器在每天的某个时刻,自动执行外部的exe程序?
   要是可以的话,能否给个参照?
非常感谢

解决方案 »

  1.   

    有一个比较间接的方法可以实现:利用Oracle10g的scheduler功能做一个手工调用的job,job中执行test.bat,在存储过程中调用此job,实现对test.bat的调用 
    步骤为: 1.创建job 
    BEGIN 
    DBMS_SCHEDULER.CREATE_JOB( 
    job_name => 'job_testbat_run', 
    job_type => 'EXECUTABLE', 
    job_action => 'C:\windows\system32\cmd.exe /c c:\test.bat > nul', 
    start_date => SYSDATE+1000000, 
    enabled => TRUE, 
    repeat_interval => 'sysdate + 10000000', 
    comments => 'Test execute backup'); 
    END; 
    / 2. 注意要启用一个服务 OracleJobScheduler%ORACLE_SID% 3. 在存储过程中调用 BEGIN 
      DBMS_SCHEDULER.RUN_JOB('job_testbat_run'); 
    END; 
      

  2.   

    假设是在晚上20:00~23:50这个时间段执行外部程序,
    请问start_date和repeat_interval怎么设置?如果创建Job时是14:00, 且指明start_date => SYSDATE, Repeat_interval => 'SYSDATE + 1'
    请问下一次执行外部程序是在明天的下午14:00吗?
    Thanks.
      

  3.   

            /* 
                 fund.sql
            */
            Declare
            Begin        str varchar2(256);
            select To_char(trunc(sysdate) + 15/24 + 30/1440, 'YYYY-MM-DD-HH24-MI-SS') into str  from dual;
    DBMS_SCHEDULER.CREATE_JOB( 
    job_name => 'AutoGetFundsData', 
    job_type => 'EXECUTABLE', 
    job_action => 'D:\Funds_Tool\a.bat'
    start_date => To_Date(str, 'YYYY-MM-DD-HH24-MI-SS'), 
    enabled => TRUE, 
    repeat_interval => 'FREQ=MINUTELY; INTERVAL=1;', 
    comments => 'Update new funds data every'
    ); 
            End;
            /
            
            1. start fund.sql;  pass
            2. DBMS_SCHEDULER.RUN_JOB('AutoGetFundsData');  can't pass
               ORA-27369: The system can't find the file specified.
               但是,'D:\Funds_Tool\a.bat'确实是存在的,并且我单独的运行a.bat是可以运行的。
                大家认为是怎么解决呢?
                谢谢