3
Динамический SQL
Текст SQL-команды формируется в момент выполнения
Причины использования
дополнительная гибкость в приложении
формирование нескольких конкретных запросов
вместо одного универсального для оптимизации
Цена
операторы не подготавливаются
возрастает риск внедрения SQL-кода
возрастает сложность сопровождения
Под динамическими командами понимаются команды SQL, текст
которых формируется и затем выполняется внутри PL/pgSQL-блока
в подпрограммах или в анонимных блоках.
В большинстве случаев можно обойтись без динамических команд,
но иногда они могут предоставить дополнительную гибкость. Например,
можно встроить в определенные места приложения возможность
выполнять команды, считанные из настроек системы. Управлять такими
настройками могут специалисты поддержки во время эксплуатации
приложения, а не программисты в момент разработки.
Иногда, при формировании отчета с большим количеством
необязательных параметров, бывает проще формировать текст запроса
прямо во время выполнения только для указанных параметров, чем
заранее, при разработке, писать сложный запрос, учитывающий все
возможные комбинации параметров.
Ценой за использование динамических команд будет отказ от
подготовленных операторов, которые по умолчанию используются
в PL/pgSQL. Также нужно следить за безопасностью кода динамических
команд с точки зрения возможности внедрения SQL-кода.
Следует отметить и существенное возрастание сложности
сопровождения. В том числе в исходном коде приложения невозможно
будет текстовым поиском обнаружить все выполняемые команды.