Стоимость «динамического SQL» варьируется в зависимости от СУБД.
В IBM DB2, где планы запросов могут быть предварительно скомпилированы до машинного кода, стоимость Dynamic SQL значительна.
В IBM Informix (IDS - Informix Dynamic Server) большинство запросов фактически являются «динамическим SQL» (исключение составляют запросы в хранимых процедурах), поскольку SQL интерпретируется во время выполнения, даже если клиентский боковая запись использует статический SQL.
Я полагаю - хотя эксперт DB2 мог бы мне противоречить - что системы CLI (ODBC, также известный как CCC) и JCC (JDBC) для DB2 делают весь SQL как динамический SQL.
Я не знаю, что делают Oracle, Sybase, MS SQL Server - я подозреваю, что они ближе к линии, принятой IDS, чем линии, принятой DB2. Для MySQL и PostgreSQL я был бы удивлен, если бы они не вели себя больше как IDS, чем DB2.
В результате с IDS нет особых накладных расходов на использование динамического SQL; на уровне сервера ваш SQL в любом случае является динамическим. Другие СУБД могут иметь другие факторы в игре.
Одна проблема для всех серверов - «как вы идентифицируете предварительно скомпилированный запрос из SQL, отправленного по проводам». В DB2 прекомпиляторы идентифицируют используемый пакет, а протокол связи между приложением и сервером - это. Насколько я понимаю, клиенты DB2, такие как ODBC и JDBC, не используют предварительно скомпилированный пакет, поэтому я считаю, что они все время эффективно выполняют динамический SQL.
Остерегайтесь внедрения SQL с помощью динамического SQL!