Oracle - DBMS_PARALLEL_EXECUTE 失败但没有错误

Oracle - DBMS_PARALLEL_EXECUTE failed with no error

我第一次使用 DBMS_PARALLEL_EXECUTE pkg。 我尝试了一个简单的操作:我有两个 table t1 和 t2,我想将 t2 的所有记录插入到 t1 中。

begin
  DBMS_PARALLEL_EXECUTE.create_task('myTsk1');
  DBMS_PARALLEL_EXECUTE.create_chuncks_by_rowid(task_name => 'myTsk1',
    table_owner => 'mySchema',
    table_name => 't2',
    bt_row => TRUE,
    chunk_size => 1000
  );
  DBMS_PARALLEL_EXECUTE.run_task(task_name => 'myTsk1',
    sql_stmt => 'insert /*+ parallel */ into mySchema.t1 (select * from mySchema.t2 where rowid between :start_id and :end_id)',
    language_flag => DBMS_SQL.NATIVE,
    parallel_leveò => 4
  );
end;

create_taskcreate_chuncks_by_rowid 之后,我在 user_parallel_execute_taskuser_parallel_execute_chunks 中看到作业未分块状态,我看到创建的分块。

当执行 run_task 几秒后执行完成。 如果我签入 user_parallel_execute_task table 所有都设置为 UNASSIGNED。

所以我检查了 user_scheduler_job_run_detailsall_scheduler_job_run_details 以了解错误原因,但 ERROR# 列为 0 并且 ADDITIONAL_INFO 为空。添加了异常陷阱但也没有引发异常。

按照@ConnorMcDonald 的建议,通过删除并行提示任务 运行 正确!

begin
  DBMS_PARALLEL_EXECUTE.create_task('myTsk1');
  DBMS_PARALLEL_EXECUTE.create_chuncks_by_rowid(task_name => 'myTsk1',
    table_owner => 'mySchema',
    table_name => 't2',
    bt_row => TRUE,
    chunk_size => 1000
  );
  DBMS_PARALLEL_EXECUTE.run_task(task_name => 'myTsk1',
    sql_stmt => 'insert into mySchema.t1 (select * from mySchema.t2 where rowid between :start_id and :end_id)',
    language_flag => DBMS_SQL.NATIVE,
    parallel_leveò => 4
  );
end;