JDBC-приложения выполняют только динамический SQL (т. Е. DB2 не использует статические пакеты).
Есть только 2 способа получить статический SQL (где запросы хранятся в пакете в базе данных): написать свое приложение, используя SQLJ (который исключает JPA / Hibernate), или использовать pureQuery (который находится между JDBC и базой данных) .
Имейте в виду, что даже при использовании динамического SQL DB2 кэширует планы выполнения запросов, поэтому, если они выполняются достаточно часто (т. Е. Они остаются в кэше), вы не увидите накладных расходов при компиляции запросов. Кэш полезен только в том случае, если запросы являются точными байтовыми совпадениями, поэтому select * from t1 where c1 = 1
не совпадает с select * from t1 where c1 = 2
и не select * from t1 where C1 = 1
(что дает тот же результат, но запрос отличается). Использование маркеров параметров (select * from t1 where c1 = ?
) является ключевым. Администратор базы данных может настроить размер кэша каталога, чтобы максимизировать коэффициент попадания в этот кэш.
Хотя кэширование помогает избежать повторной компиляции запроса, оно не обеспечивает стабильность плана, как статический SQL, поэтому YMMV.