Можем ли мы указать степень параллелизма динамически?

У меня есть выборочный SQL-запрос, в котором используется параллелизм, примерно так

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

Как вы можете видеть здесь, у меня сложно- закодировал степень, но я не хочу этого делать, поскольку количество процессоров не одинаково во всех БД, где выполняется этот код.

Мое требование: Мне нужно запросить V $ ПАРАМЕТР для доступного количества ЦП и использовать значение как результат-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 параллельных потока, независимо от доступных ЦП. Верно ли это? Если нет, есть ли другое решение для моих требований?

5
задан Vivek 23 August 2011 в 11:37
поделиться