Каков максимальный NUM_OF_PARAMS в заполнителях Perl DBI - PullRequest
0 голосов
/ 26 октября 2011

Какое максимальное количество заполнителей допускается в одном выражении? То есть верхний предел атрибута NUM_OF_PARAMS.

У меня возникает странная проблема, когда я пытаюсь настроить максимальное количество вставок из нескольких строк, то есть установка числа в 20 000 приводит к ошибке, поскольку $sth->{NUM_OF_PARAMS} становится отрицательным.

Снижение максимального количества вставок до 5000 работает нормально.

Спасибо.

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Насколько мне известно, единственное ограничение в DBI - это то, что значение помещается в скаляр Perl, так что это то, что можно удерживать в нем.Однако для DBD это совсем другое.Я сомневаюсь во многих, если какие-либо базы данных поддерживают 20000 параметров.Кстати, NUM_OF_PARAMS только для чтения, поэтому я понятия не имею, что вы подразумеваете под «установить число в 20 000».Я предполагаю, что вы просто имеете в виду, что вы создаете оператор SQL с 20000 параметрами, а затем читаете NUM_OF_PARAMS, и это дает вам отрицательное значение.Если последнее, я предлагаю вам сообщить (с примером), что на rt.cpan.org это звучит неправильно.

Я не могу представить, что создание оператора SQL с 20000 параметрами будет очень эффективнымв любой базе данных.Гораздо лучше попытаться уменьшить это до диапазона или что-то вроде этого, если вы можете.В ODBC 20000 параметров означают 20000 IPD и APD, и они представляют собой довольно большие структуры.Поскольку библиотека DB2 Cli очень похожа на ODBC, я бы предположил, что вы съедите много памяти.

0 голосов
/ 11 ноября 2011

Учитывая, что 20 000 вызывает отрицательные проблемы, а 5 000 - нет, где-то в системе есть 16-разрядное целое число со знаком, и поэтому верхняя граница составляет примерно 16383.

Однако ограничение зависит от базового уровня.СУБД и API, используемые модулем DBD для СУБД (и, возможно, сам код DBD);DBI не влияет на него.

Вы уверены, что это лучший способ решить вашу проблему?

...