2016-07-27 4 views
0

2つのテーブルの特定の値を更新するストアドプロシージャがあります。しかし、更新すべき議論のリストや価値のセットは10議論に成長し、将来的にはさらに大きくなる可能性がある。どのようにこれを処理することができますか? (格納)プロシージャはn個パラメータを必要とするときストアドプロシージャの引数の長いリストを避けるには?

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

まあ、技術的に、あなたは通常n個パラメータを提供周りに取得していません。

ただし、一部のプログラミング言語では、これらのすべてのパラメータを1つずつ提供する代わりに、配列/辞書/オブジェクトが提供され、「1つのパラメータ」になります。私はこれが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

関連する問題