加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 站长百科 > 正文

Oracle SQL%ROWCOUNT等效于DBMS_PARALLEL_EXECUTE

发布时间:2021-01-12 03:21:49 所属栏目:站长百科 来源:网络整理
导读:是否有相当于SQL%ROWCOUNT运行DBMS_PARALLEL_EXECUTE?目前,如果我在语句后运行SQL%ROWCOUNT,它将只返回1. 非常感谢帮助.谢谢=) 解决方法 这是一个有趣的问题!我从未意识到这种需要.可能是因为DBA_PARALLEL_EXECUTE被设计并通常用于影响其大部分的大型表(

是否有相当于SQL%ROWCOUNT运行DBMS_PARALLEL_EXECUTE?目前,如果我在语句后运行SQL%ROWCOUNT,它将只返回1.

非常感谢帮助.谢谢=)

解决方法

这是一个有趣的问题!我从未意识到这种需要.可能是因为DBA_PARALLEL_EXECUTE被设计并通常用于影响其大部分的大型表(mn行)上的DML操作.
因此,对我来说,每个块的受影响行数(SQL $ROWCOUNT)并不重要.
我有自己的验证脚本,最终验证任务是否达到了它的总体目的.

However,this can perhaps be introduced in future version of oracle.
As far as I am aware (upto 12c) none of DBA_PARALLEL_EXECUTE views gives this
additional info

话虽如此,您始终可以通过run_task编写和调用自定义过程.在MY_PROCEDURE中进行DML操作后,您可以在日志文件或表中编写SQL $ROWCOUNT.

DECLARE
  l_task     VARCHAR2(30) := 'parallel_processing';
  l_sql_stmt VARCHAR2(32767);
  l_try      NUMBER;
  l_status   NUMBER;
BEGIN
  DBMS_PARALLEL_EXECUTE.create_task (task_name => l_task);

  DBMS_PARALLEL_EXECUTE.create_chunks_by_rowid(task_name   => l_task,table_owner => 'SCHEMANAME',table_name  => 'T_PROCESS',by_row      => TRUE,chunk_size  => 10000);

  l_sql_stmt := 'begin MY_PROCEDURE( :start_id,:end_id ); end;';

  DBMS_PARALLEL_EXECUTE.run_task(task_name      => l_task,sql_stmt       => l_sql_stmt,language_flag  => DBMS_SQL.NATIVE,parallel_level => 10);

  -- If there is error,RESUME it for at most 2 times.
  l_try := 0;
  l_status := DBMS_PARALLEL_EXECUTE.task_status(l_task);
  WHILE(l_try < 2 and l_status != DBMS_PARALLEL_EXECUTE.FINISHED) 
  Loop
    l_try := l_try + 1;
    DBMS_PARALLEL_EXECUTE.resume_task(l_task);
    l_status := DBMS_PARALLEL_EXECUTE.task_status(l_task);
  END LOOP;

  DBMS_PARALLEL_EXECUTE.drop_task(l_task);
END;
/

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读