我有个存储过程叫 aaa
现在想每天下午4点执行他,用那个PL/SQL 的那个JOB做 要怎么写啊?

解决方案 »

  1.   

    一段用定时任务的例子:一、在PLSQL中创建表:
    create table HWQY.TEST
    (
    CARNO     VARCHAR2(30),
    CARINFOID NUMBER
    )二、在PLSQL中创建存储过程:
    create or replace PRocedure pro_test
    AS
    carinfo_id number;
    BEGIN
    select s_CarInfoID.nextval into carinfo_id
    from dual;
    insert into test(test.carno,test.carinfoid) values(carinfo_id,'123');
    commit;
    end pro_test;三、在SQL命令窗口中启动任务:
    在SQL>后执行:
    VARIABLE jobno number;
    begin
    DBMS_JOB.SUBMIT(:jobno,
        'pro_test;',
        SYSDATE,'sysdate+1/24/12');
       
        commit;
        end;
        /提交后提示:
    PL/SQL procedure successfully completed
    jobno
    ---------
    1四、跟踪任务的情况(查看任务队列):SQL> select job,next_date,next_sec,failures,broken from user_jobs;       JOB NEXT_DATE   NEXT_SEC           FAILURES BROKEN
    ---------- ----------- ---------------- ---------- ------
             1 2008-2-22 ?01:00:00                  0 N说明有一个任务存在了。
    执行select * from test t查看定时任务的结果。可以看出定时任务是正常执行了的。五、停止已经启动的定时任务:
    先执行select job,next_date,next_sec,failures,broken from user_jobs;
    以查看定时任务的job号。
    在SQL>中执行下面的语句停止一个已经启动的定时任务:
    begin
    dbms_job.remove(1);
    commit;
    end;
    /
    表示停止job为1的任务。
    执行后显示如下:
    PL/SQL procedure successfully completed六、查看进程数:
    show parameter job_queue_processes;
    必须>0,否则执行下面的命令修改:
    alter system set job_queue_processes=5;七、再创建一个任务(每5分钟执行一次):
    variable jobno number;begin
    dbms_job.submit(:jobno, 'pro_test;',
    sysdate,'sysdate+1/24/12');
    commit;
    end;
    /建立一个定时任务后,在PLSQL中查看JOB,它的sql语句类似的是如下:begin
    sys.dbms_job.submit(job => :jobno,
                          what => 'pro_test;',
                          next_date => to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'sysdate+1/24/12');
    commit;
    end;
    /所以,创建一个任务的完整的格式是:
    variable jobno number;
    begin
    sys.dbms_job.submit(job => :jobno,
                          what => 'pro_test;',
                          next_date => to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'sysdate+1/24/12');
    commit;
    end;
    /
    --系统会自动分配一个任务号jobno。八、 执行select job,next_date,next_sec,failures,broken from user_jobs;
    结果:
       JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
    1 1 2008-2-22 AM 01:00:00 01:00:00 0 N
    2 2 2008-2-21 PM 05:42:45 17:42:45 0 N
    3 3 2008-2-21 PM 05:42:45 17:42:45 0 N
    摘自 zmyxmjz的专栏