2012-03-02 57 views
2

它是一個很好的做法,嵌套的存儲過程(這意味着調用另一個存儲過程中的存儲過程)?在嵌套存儲過程時是否應該遵守任何預防措施?有多少人可以在裏面嵌套有一個允許的限制?關於嵌套的存儲過程

由於在預期

回答

3

是的,有在嵌套級別的限制。從manual

您可以嵌套存儲過程高達32個級別。

的限制存在可能意味着嵌套存儲過程調用太多是不是一件非常好的事情的事實。然而,最高水平對我來說似乎足夠大,不必擔心像5層左右的嵌套調用。

事實上,我從來沒有聽說已經嵌套推出任何形式的缺點在你的設計要求,也沒有我經歷過任何實際的缺點從彼此調用存儲過程。相反,我認爲,考慮您的服務器端代碼可以使您的設計更加靈活。或者,如果沒有其他的東西,它至少允許你通過將更大的代碼拆分成更適中的(也可能是邏輯上完整的)單元來使你的存儲過程的代碼更易於管理。

我的意思並不是說,你應該儘量因素不惜任何代價,你的存儲過程,我不會看到什麼毛病不必窩你你的程序是否會更好地滿足您的設計。

4

最大嵌套級別是32 Nesting Stored Procedures
在我看來,這樣做的真正的缺點是,它很快失控什麼SP依賴於其他SP。風險在於你改變了另一個SP中具有無法預料的效果的SP。一旦你咬了你幾次,你在改變SP之前猶豫不決,並且考慮創建一個幾乎完全相同的新的SP,並且過了一段時間,沒有人知道SP爲什麼或者實際上正在使用SP。容易相當混亂。

+0

對不起,你的要點是什麼?我只是不確定。它是嵌套存儲過程還是「複製」它們使事情變得凌亂? – 2012-03-02 08:23:59

+0

@AndriyM - 問題的關鍵是,我認爲你應該小心使用SP的實現[DRY(http://en.wikipedia.org/wiki/Don%27t_repeat_yourself)原則。在某些情況下,擁有一個可以在其他SP中重用的定義明確的任務的SP當然是有道理的,但是......在我看來,嵌套SP是很難維護的。忘了回答你的問題。 「嵌套」和「幾乎複製」都會讓事情變得混亂。所以在我工作的項目中,我們有**沒有**(幾乎)DB/SP中的所有不受約束控制的業務規則都被控制在中間服務器中。 – 2012-03-02 08:34:08

+0

我現在看到,非常感謝!我認爲我可以同意維護SPs(特別是當它們中有很多時)比維護大致相同數量的客戶端代碼更困難。有一種情況是,如果有一個及時更新的產品文檔是非常重要的,並且不僅僅是一個人參與維護SP時更是如此。 – 2012-03-02 09:01:07