#perl #dbi #dbd
#perl #dbi #дбд
Вопрос:
Какое максимальное количество заполнителей разрешено в одном операторе? Т.е. верхний предел атрибута NUM_OF_PARAMS.
Я сталкиваюсь со странной проблемой, когда я пытаюсь настроить максимальное количество вставок из нескольких строк, т.Е. Установка числа равным 20 000 выдает мне ошибку, потому $sth->{NUM_OF_PARAMS}
что становится отрицательной.
Уменьшение максимального количества вставок до 5000 работает нормально.
Спасибо.
Комментарии:
1. Не знаю, правильно ли я понял ваш вопрос, но если вам нужно знать его значение, то почему бы не «print $sth->{NUM_OF_PARAMS};»?
2. @ArunMu: другими словами, мой вопрос: существует ли ограничение на количество заполнителей (?), Которые принимает DBI? Например, могу ли я передать 10000 вопросительных знаков в одном запросе?
3. Я не вижу никаких ограничений, налагаемых DBI в его исходном коде. Если вы обнаруживаете случай, когда существует ограничение, вполне вероятно, что вы столкнулись с ограничением в DBD для вашей базы данных.
4. @Ven’Tatsu: вы правы, похоже, это происходит из DBD::DB2 — я все еще не понимаю, почему…
Ответ №1:
Насколько мне известно, единственным ограничением в 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, я бы предположил, что вы собираетесь потреблять много памяти.
Ответ №2:
Учитывая, что 20 000 вызывают негативные проблемы, а 5000 — нет, где-то в системе есть 16-разрядное целое число со знаком, и поэтому верхняя граница равна приблизительно 16383.
Однако это ограничение зависит от базовой СУБД и API, используемого модулем DBD для СУБД (и, возможно, самого кода DBD); DBI на него не влияет.
Вы уверены, что это лучший способ решить вашу проблему?