2016-07-27 33 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