gpt4 book ai didi

sql - 相当于 DBMS_PARALLEL_EXECUTE 的 Oracle SQL%ROWCOUNT

转载 作者:行者123 更新时间:2023-12-01 05:06:40 25 4
gpt4 key购买 nike

是否有等效的 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 编写和调用您的自定义过程。你可以写 SQL$ROWCOUNT DML 操作后的日志文件或表中 MY_PROCEDURE .
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;
/

关于sql - 相当于 DBMS_PARALLEL_EXECUTE 的 Oracle SQL%ROWCOUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27856410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com