Oracle 11g PL / SQL Диана Узлы Предел - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть утверждение, подобное приведенному ниже, но оно дополнено для выполнения 1000 вызовов одновременно.Все, что приводит к ошибке PLS-123 Программа Too Large Diana Nodes

begin
sp_myprocedure(....)
sp_myprocedure(....)
sp_myprocedure(....)
sp_myprocedure(....)
end

Мы переходим на 11g, и мне было интересно, можно ли, например, увеличить это ограничение до 2000.

Спасибо

Ответы [ 2 ]

5 голосов
/ 11 февраля 2012

"У меня есть заявление, подобное приведенному ниже, но оно дополнено для выполнения 1000 вызовов за один раз "

Это очень плохая стратегия программирования. Писать одно и то же несколько раз - запах кода. Каждый раз, когда мы обнаруживаем, что программируем с помощью cut'n'paste, а затем немного редактирования - это время, когда мы должны остановиться и спросить себя: «Хммм, есть ли лучший способ сделать это?»

«Параметры разные для каждого вызова хранимой процедуры»

Да, но параметры должны прийти откуда-то. Предположительно в данный момент вы жестко их кодируете тысячу раз. Тьфу.

Лучшим решением было бы хранить их в таблице. Тогда вы могли бы написать простой цикл. Как это:

for prec in ( select p1, p2 from my_parameters
              order by id -- if ordering is important 
            )
loop
    sp_myprocedure(prec.p1, prec.p2);
end loop;

Поскольку вы сохраняете параметры в таблице, у вас может быть столько обращений к этому процессу, сколько вам нужно, и вы не связаны лимитом узла Diana.

Правда, вам придется перенести значения параметров в таблицу, но хранить данные в таблице не сложнее, чем поддерживать жестко закодированные значения в исходном коде.

1 голос
/ 10 февраля 2012

Если вы просто переходите с 10g, то я не верю, что лимит изменился. Итак, если у вас возникли проблемы сейчас, вы будете иметь их снова в 11g. Взгляните на эту Спросите Тома статью. Общее предложение состоит в том, чтобы поместить вашу процедуру в пакет. Или разбить его на более мелкие блоки. Если вы получаете сообщение об ошибке только при запуске блока, который вызывает процедуру 1000 раз и в самой процедуре, тогда я предлагаю вам попробовать, как говорит APC, и выполнить вместо этого цикл, поскольку это должно уменьшить количество узлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...