2012-03-02 13 views
2

ネストされたストアドプロシージャ(別のストアドプロシージャ内でストアドプロシージャを呼び出すことを意味する)を使用することをお勧めしますか?ストアドプロシージャのネスト中に従うべき注意事項はありますか?内部に巣を入れることができる人数には制限がありますか?見越してネストされたストアドプロシージャについて

おかげで

答えて

3

はい、ネストのレベルには制限があります。 manual

ストアドプロシージャ[...]は最大32レベルまでネストできます。

制限がストアドプロシージャを入れ子にすることは非常に良いことではありませんあまりにも多くを呼び出すことを意味するものかもしれないが存在するという事実。しかし、最大レベルは私には5人ほどの深いレベルのコールを入れ子にすることを心配しないように十分に大きいようです。

そして実際、私はあらゆる種類のデザイン導入の欠点で呼び出しを入れ子になったことを聞いたことがない、また私は、互いからのストアドプロシージャを呼び出すから任意の実際の欠点を経験しています。それどころか、サーバー側のコードを考慮することで、設計をより柔軟にすることができます。または、それ以外のものがあれば、少なくとも、より大きなものをより中程度のサイズ(場合によっては論理的に完全な)に分割することで、ストアドプロシージャのコードをより管理しやすくすることができます。

ストアドプロシージャを何らかのコストで考慮する必要があるとは限りません。あなたのデザインに合っていれば、プロシージャをネストすることに間違いはありません。

4

最大のネストレベルが32 Nesting Stored Proceduresです。
私の意見では、これを行うことの本当の欠点は、SPが別のSPに依存していることをすぐに制御できなくなることです。リスクは、別のSPで予期しない影響を及ぼすあるSP内の何かを変更することです。 SPを変更する前に躊躇してしまったら、まったく同じ事をしばらくして新しいSPを作成することを検討します。なぜSPがそこにあるのか、実際に使用されているのか誰も知りません。容易にかなり乱雑になります。

+0

申し訳ございません、あなたのポイントは何ですか?私は確信していません。それはストアドプロシージャを入れ子にしているのか、それとも「ほとんど複製する」ことで物事が乱雑になりますか? –

+0

@AndriyM - 要点は、[DRY](http://en.wikipedia.org/wiki/Don%27t_repeat_yourself)の原則を実装するためにSPを使用するように注意するべきだと思います。場合によっては、他のSPで再利用できる明確なタスクを持っているSPを1つ持つことはもちろん理にかなっていますが...入れ子SPは(私の意見では)維持するのは難しいです。あなたの質問に答えるのを忘れました。 「入れ子にする」と「ほぼ複製する」の両方で、物事が乱雑になります。ですから、私が働くプロジェクトでは、DB/SPの制約のないすべてのビジネスルールはミドルツリーで管理されています。 –

+0

私は今、非常にありがとう!私は、SPを維持すること(特にそれらの多くがある場合)は、ほぼ同じ量のクライアントコードを維持するよりも難しいことに同意すると思います。これは、適切かつ適時に更新された製品のドキュメント化が特に重要である場合、そしてSPを維持することに一人ではない場合にはさらに重要です。 –