syb_nsql против выполнения вызовов в Perl - PullRequest
2 голосов
/ 23 октября 2010

Я пытаюсь запросить базу данных Sybase, используя DBD :: Sybase .Может кто-нибудь уточнить, в чем разница между использованием вызовов syb_nsql против prepare (...) - execute (..)?

1 Ответ

0 голосов
/ 23 октября 2010

syb_nsql (в качестве прямого порта Sybase :: DBlib nsql, который является оболочкой довольно высокого уровня) поддерживает все расширенные функциональные возможности nsql, которые DBD :: Sybase не готовит-выполняет (IIRC ) изначально и для которого вам нужно написать код-обертку самостоятельно (в общем, вам все равно придется заново реализовать собственную версию nsql):

  • Функциональность MaxRows для ограничения количества возвращаемых строк для экономии использования памяти

  • необязательная логика повторных попыток взаимоблокировки

  • проверка ошибок (с использованием сопутствующей ошибки и обработчики сообщений - я не помню, чтобы DBD :: Sybase имел обработчики сообщений)

  • и несколько вариантов формата возвращаемых значений.

  • Кроме того, данные могут быть либо возвращены вызывающей стороне навалом (таким образом, нет необходимости писать свой собственный цикл для fetch_arrayref и т. Д.), Либо обрабатываются построчно через подпрограмму обратного вызова, переданную в качестве аргумента. (эта функциональность аналогична методу r_sql ()).

Учитывая тот факт, что nsql фактически реализован с использованием prepare / execute / fetchrow_arrayref; он практически не будет иметь функциональных отличий от любой обычной функции подготовки к выполнению, которую вы используете напрямую . Кажется, он даже поддерживает заполнители в соответствии с комментариями к коду, хотя, похоже, это не задокументировано.

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

...