2016-07-27 62 views
0

我有一個存儲過程來更新兩個表中的某些值。但是,要更新的參數列表或一組值將增加到10個參數,未來可能會增長更多。這怎麼處理?如何避免存儲過程的長參數列表?

CREATE DEFINER=`root`@`localhost` PROCEDURE `update_base_plan`(userId int,newPlanId int,nextPlanId int,maxCreditPulseAllocated int) 
begin 
     if userId is not null and newPlanId is not null and nextPlanId is not null 
               and maxCreditPulseAllocated is not null 
       then 
       update planallocation as pa 
       left join subscriptioninfo as si 
       on pa.SubscriptionId = si.SubscriptionId 
       left join plans as pl 
       on pa.CurrentPlanId = pl.PlanId 
       set pa.CurrentPlanId = newPlanId, pa.NextPlanId = nextPlanId, 
       pa.MaxCreditPulseAllocated = maxCreditPulseAllocated 
       where pl.Plan_Type = 'base' and 
       si.UserId = userId; 
     end if; 
    end$$ 

DELIMITER ; 

回答

0

那麼從技術上講,當(存儲)過程需要ñ參數,你通常不會讓周圍提供ñ參數。

然而,在一些編程語言中,不是一次提供所有這些參數,而是提供了一個數組/字典/對象,變成了「一個參數」。我不確定,如果這可能在MySQL中,但你可能可以使用JSON作爲輸入,並使MySQL解包(或者你會叫它)。例如參見http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html(和兄弟頁面)。

根據數據類型的不同,您可以執行其他類似於csv或換行的編碼。但是,如果溝通不夠好,我會建議反對立場爭議。

+0

MySQL是否支持JSON? –

+0

在較新的版本是的。不知道哪個版本介紹它。快速瀏覽頁面建議只有版本5.7具有json功能...悲傷; o / – Jakumi