2009-08-27 27 views
1

我有一個託管MySQL數據庫的客戶端,開發人員一直要求我添加非常簡單的存儲過程。我看着這樣的存儲過程,我看不出有什麼理由將它作爲存儲過程實現,而不是在應用程序代碼中實現。我正確的說,這對存儲過程的使用是非常奇怪的嗎?這是MySQL存儲過程的邏輯用法嗎?

CREATE DEFINER = 'username'@'%' PROCEDURE `sp_get_payrollgl`(IN pi_glcode TEXT) 
    DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY INVOKER 
    COMMENT '' 
BEGIN 

    if (pi_glcode is null || pi_glcode = '') then 
    select glcode,descr, 
     case when crdb = 1 then 'CR' else 'DB' end as 'crdb', 
     case when taxable = 1 then 'Yes' else 'No' end as 'taxable', 
     case when billable = 1 then 'Yes' else 'No' end as 'billable', 
     case when active = 1 then 'Yes' else 'No' end as 'active' 
    from payrollgl; 
    else 
    select glcode,descr, 
     case when crdb = 1 then 'CR' else 'DB' end as 'crdb', 
     case when taxable = 1 then 'Yes' else 'No' end as 'taxable', 
     case when billable = 1 then 'Yes' else 'No' end as 'billable', 
     case when active = 1 then 'Yes' else 'No' end as 'active' 
    from payrollgl where glcode = pi_glcode; 
    end if; 
END; 
+0

http://www.pcpro.co.uk/blogs/2008/05/18/when-to-use-stored-procedures/ – 2009-08-27 14:19:10

回答

5

對於一個簡單的例程,我會說這是一個響亮的號碼。有更好的方法來實現這個特定的存儲過程的對象,例如,在配置文件中預先定義它,並且/或者將其作爲數組對象存儲並且定義已經就緒。

我個人實現存儲過程時,有一組複雜的需要在後臺發生的指示,特別是操縱大量跨不同表中的數據。好處很明顯,你沒有太多的往返和數據庫連接,以最大限度地減少你會遇到的開銷,否則。

我發現我有時使用存儲過程定義業務邏輯從比方說,一個前端顯影劑封裝複雜的細節或內部工作方式。另一個好處是,如果你是正確設計你的系統,使用存儲過程可以使你的系統比你想象的更具可擴展性。

當您在不同的環境中進行開發時,它尤其有用,例如開發QA到UAT。如果您必須在某處的某個服務中更改一行代碼,則需要將其刪除並重新部署,以使更改生效,這當然會造成大量中斷。通過商店程序,您可以簡單地改變它,並且您在途中。祝你好運!

+0

+1 ......這就是數據的呈現。這不是數據庫工作。 – 2009-08-27 14:42:10