如何避免存储过程的长参数列表?

时间:2016-07-27 05:43:40

标签: mysql stored-procedures arguments

我有一个存储过程来更新两个表中的某些值。但是要更新的参数列表或值集已增加到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 ;

1 个答案:

答案 0 :(得分:0)

技术上,当(存储的)程序需要 n 参数时,您通常不会提供 n 参数。

然而,在某些编程语言中,不是一次提供所有这些参数,而是提供数组/字典/对象,转换为"一个参数"。我不确定,如果在mysql中这是可能的,但你可能可以使用json作为输入并使mysql解压缩它(或者你可以调用它)。例如,请参阅http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html(和兄弟页面)。

根据数据类型,您可以执行其他类似于csv或新行分隔的编码。但是,当他们没有得到足够好的沟通时,我建议反对位置论证。