2012-03-02 3 views
2

Правильно ли иметь вложенные хранимые процедуры (что означает вызов хранимой процедуры в другой хранимой процедуре)? Существуют ли какие-либо меры предосторожности, которые следует соблюдать при вложенности хранимых процедур? Существует ли допустимый предел того, сколько из них может быть внутри?Что касается вложенной хранимой процедуры

Благодаря в ожидании

ответ

3

Да, существует ограничение на уровень гнездования. От manual:

Вы можете вложить хранимые процедуры [...] до 32 уровней.

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

И действительно, я никогда не слышал, чтобы вложенные вызовы в вашем дизайне вносили какие-либо недостатки, и я не испытывал никакого реального недостатка в вызове хранимых процедур друг от друга. Напротив, я думаю, что факторинг вашего серверного кода позволяет сделать ваш дизайн более гибким. Или, если ничего другого, это по крайней мере позволяет вам сделать код хранимых процедур более управляемым, разделив большие на более умеренные (и, возможно, логически завершенные) единицы.

Я не хочу сказать, что вы всегда должны пытаться повлиять на ваши хранимые процедуры любой ценой, я просто не вижу ничего плохого в том, что вам нужно вложить свои процедуры, если это будет лучше соответствовать вашему дизайну.

4

Максимальный уровень вложенности составляет 32 Nesting Stored Procedures.
На мой взгляд, реальным недостатком этого является то, что он быстро выходит из-под контроля, какой SP зависит от другого SP. Риск состоит в том, что вы что-то изменяете в одном SP, который имеет непредвиденные эффекты в другом SP. После того, как вы несколько раз вас укусили, вы смутитесь перед тем, как сменить SP, и подумайте о создании нового, который делает почти ту же самую вещь, и через некоторое время никто не знает, почему SP там, или если он фактически используется. Легко становится грязным.

+0

Извините, что * * ваша точка? Я просто не уверен. Является ли это вложенными хранимыми процедурами или «почти дублированием» их, что делает вещи беспорядочными? –

+0

@AndriyM - Дело в том, что я думаю, вы должны быть осторожны, чтобы использовать SP для реализации принципа [DRY] (http://en.wikipedia.org/wiki/Don%27t_repeat_yourself). В некоторых случаях, конечно, имеет смысл иметь один SP, который имеет четко определенную задачу, которую можно использовать повторно в других SP, но ... Вложенные SP (на мой взгляд) трудно поддерживать. Забыл ответить на ваш вопрос. И «вложенность», и «почти дублирование» делает вещи беспорядочными. Таким образом, в проекте, в котором я работаю, у нас нет ** (почти) бизнес-правил в DB/SP, все, что не контролируется ограничениями, контролируется в средстве. –

+0

Я вижу сейчас, большое спасибо! Я думаю, что могу согласиться с тем, что поддерживать SP (особенно когда их много) сложнее, чем поддерживать примерно одинаковое количество клиентского кода. Это один из случаев, когда хорошая и своевременная обновленная документация по продукту особенно важна, и тем более, когда не только один человек участвует в поддержании СП. –

Смежные вопросы