У меня есть запрос SQL выбора, который использует параллелизм, что-то вроде этого
INSERT/*+ APPEND PARALLEL (tst, 6) */ INTO test_table tst
(
**************
**************
**************
)
SELECT /*+ PARALLEL (a, 6) */ DISTINCT
**************
**************
**************
FROM src_table a;
Как вы можете видеть здесь, я жестко закодировал степень, но я не хочу этого делать, поскольку число процессоров не одинаково во всех БД, где выполняется этот код.
My requirement:
Мне нужно запросить V$PARAMETER
о доступном количестве процессоров и использовать значение как 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 параллельных потока, независимо от доступных процессоров. Это правильный способ сделать? Если нет, есть ли другое решение для моего требования?