首页 > 解决方案 > Oracle - DBMS_PARALLEL_EXECUTE 失败,没有错误

问题描述

我第一次使用 DBMS_PARALLEL_EXECUTE pkg。我尝试了一个简单的操作:我有两个表 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表格,则所有内容都设置为未签名。

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

标签: oracleplsqloracle11g

解决方案


正如@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;

推荐阅读