Писали ли хранимые процедуры в SQL
Что проверяют
Был ли реальный опыт и понимаете ли вы цену переноса логики в базу. Часто вопрос идёт от легаси, которое придётся поддерживать, поэтому честное «читал и правил, но с нуля не писал» здесь лучше выдуманного опыта.
Как отвечать
Назовите диалект и задачи. В PostgreSQL это функции и процедуры на PL/pgSQL, в Oracle пакеты PL/SQL, в SQL Server процедуры на T-SQL. Диалекты несовместимы, и синтаксис обработки ошибок у них разный, поэтому говорить надо про тот, с которым работали.
Где перенос в базу оправдан:
- массовая обработка рядом с данными, когда иначе миллион строк едет в приложение и обратно;
- операция, которую хочется выполнить одним обращением вместо десятка;
- ограничение доступа: права выдаются на процедуру, а не на таблицы;
- легаси, где логика уже там и переносить её дороже, чем поддерживать.
Со стороны Java покажите способ вызова: обычный вызов через JDBC, обёртка Spring или объявление метода репозитория. И обязательно скажите, что текст процедуры лежит в репозитории и накатывается миграцией, как любой другой код.
Где спотыкаются
Повторяют заученное «процедуры быстрее, потому что скомпилированы». Выигрыш обычно в числе обращений к базе и объёме передаваемых данных, а сохранённый универсальный план порой оказывается хуже, чем построенный под конкретные параметры вызова.
Держат процедуры вне репозитория. Их правят прямо на сервере, версии расходятся между окружениями, ревью не бывает, и никто не может сказать, какой именно код сейчас выполняется на проде.
Уносят в базу всю бизнес-логику. Приложение масштабируется добавлением экземпляров, база так не умеет, а отладка, тесты и перенос на другую СУБД становятся заметно дороже, чем для обычного кода.