Procedure Prc_Create_Job Is
   
  Begin
       Dbms_Job.Submit(Sysjobid,
                      'Pkg1.Prc_Main_Handle(' || n_Jobid || ');');
      Insert Into tb1
        (Jobid, Sysid, Jobname)
      Values
        (n_Jobid, Sysjobid, 'wow');
         Commit;
    End Prc_Create_Job; 
上面的是执行完prc_create_job之后开始执行job,还是运行到语句 Dbms_Job.Submit(Sysjobid,
  'Pkg1.Prc_Main_Handle(' || n_Jobid || ');');就开始执行了,说说原因,谢谢
           

解决方案 »

  1.   


    Dbms_Job.Submit(Sysjobid,
      'Pkg1.Prc_Main_Handle(' || n_Jobid || ');');
    这个就是调度job的!每次执行这个Prc_Create_Job 过程,系统就会开始执行后面的job的
      

  2.   

    运行到
    Dbms_Job.Submit(Sysjobid,
      'Pkg1.Prc_Main_Handle(' || n_Jobid || ');');时候就开始调度job了  ,然后继续后面的insert操作
      

  3.   

    先执行存储过程,然后再执行Job
      

  4.   

    为什么?你是说job和create_job的存储过程并发执行?
      

  5.   

    当你执行到dbms_job.submit当时候,他将把这个job提交到了job的队列中
    如果当前没有job等待,这个job就可以立马执行。因此job的运行可能就和create job并发执行
    这是我的理解。
    To submit a job to the job queue
      

  6.   

    上面的是执行完prc_create_job之后开始执行job,还是运行到语句 Dbms_Job.Submit(Sysjobid,
      'Pkg1.Prc_Main_Handle(' || n_Jobid || ');');就开始执行了,说说原因,谢谢
      submit后立即执行。执行job是另外一个线程(进程),跟当前存储过程的线程不是同一个。
      

  7.   

    运行到语句 Dbms_Job.Submit(Sysjobid,
      'Pkg1.Prc_Main_Handle(' || n_Jobid || ');');就开始执行了和写的sql脚本道理是一样的。
      

  8.   

    那我的job 依赖后面的语句,是不是会出问题啊
      

  9.   

    那你就只有将你的后面的语句写到Pkg1.Prc_Main_Handle中,根据你具体逻辑实现了
      

  10.   


    那你不会把后面那个insert和commit放到调用job前面吗?
      

  11.   

    执行到commit的时候job开始运行.
      

  12.   

    SQL> set serveroutput on
    SQL> desc t_test
    Name Type   Nullable Default Comments 
    ---- ------ -------- ------- -------- 
    ID   NUMBER Y                         
    OPER DATE   Y                         
     
    SQL> 
    SQL> declare
      2  v_job number;
      3  begin
      4  dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
      5  dbms_job.submit(v_job,'insert into t_test select nvl(max(id),0)+1,sysdate from t_test;');
      6  dbms_output.put_line(v_job);
      7  end;
      8  /
     
    2010-11-11 16:24:18
    269
     
    PL/SQL procedure successfully completed
     
    SQL> select id,to_char(oper,'yyyy-mm-dd hh24:mi:ss') from t_test;
     
            ID TO_CHAR(OPER,'YYYY-MM-DDHH24:M
    ---------- ------------------------------
     
    SQL> 
    SQL> begin
      2  commit;
      3  dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
      4  end;
      5  /
     
    2010-11-11 16:24:59
     
    PL/SQL procedure successfully completed
     
    SQL> select id,to_char(oper,'yyyy-mm-dd hh24:mi:ss') from t_test;
     
            ID TO_CHAR(OPER,'YYYY-MM-DDHH24:M
    ---------- ------------------------------
             1 2010-11-11 16:25:02
     
    SQL> 
      

  13.   

    那你看我过程中,commit是先对insert起了作用还是job?