gpt4 book ai didi

sql - 我们可以动态指定并行度吗?

转载 作者:行者123 更新时间:2023-12-04 18:50:16 24 4
gpt4 key购买 nike

我有一个使用并行性的选择 SQL 查询,就像这样

INSERT/*+ APPEND PARALLEL (tst, 6) */ INTO test_table tst
(
**************
**************
**************
)
SELECT /*+ PARALLEL (a, 6) */ DISTINCT
**************
**************
**************
FROM src_table a;

正如您在此处看到的,我已经对学位进行了硬编码,但是我不想这样做,因为在执行此代码的所有数据库中,CPU 的数量并不相同。
My requirement:我需要查询 V$PARAMETER对于可用 CPU 计数,并将该值用作 result-2在我的查询中。像这样的东西...
DECLARE
degree varchar2(1);
BEGIN
select value-2 INTO degree from v$parameter where name='cpu_count';

INSERT/*+ APPEND PARALLEL (tst, degree) */ INTO test_table tst
(
**************
**************
**************
)
SELECT /*+ PARALLEL (a, degree) */ DISTINCT
**************
**************
**************
FROM src_table a;
END;

但是,它并没有像我预期的那样工作,而且我看到 32 个并行线程,而不管可用的 CPU 是多少。这是正确的做法吗?如果没有,是否还有其他解决方案可以满足我的要求?

最佳答案

维维克,

您可以使用动态 SQL 在 PL/SQL 函数或过程中构建 INSERT 语句。这样你就可以利用你已经检索到的变量“degree”。

就像是:

DECLARE
degree varchar2(1);
BEGIN
select value-2
INTO degree
from v$parameter
where name='cpu_count';

EXECUTE IMMEDIATE('INSERT /*+ APPEND PARALLEL (tst, '||degree||') */ '||
' INTO test_table tst ( '||
' ************** '||
' ************** '||
' ************** '||
' ) '||
'SELECT /*+ PARALLEL (a, '||degree||') */ '||
' DISTINCT '||
' ************** '||
' ************** '||
' ************** '||
' FROM src_table a');
END;

关于sql - 我们可以动态指定并行度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7160417/

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