2017-11-01 7 views
0

MySQL Workbenchでは、今週の月曜日にemployeeが動作する場合、次週は火曜日に作業しなければならない水曜日の週に続きます...など。ケースステートメントを使用して名簿を更新する

私が実行したときにちょうどすべてのタプルのためnullを返す(caseストアドプロシージャを使用することによって、これを達成しようとしてきたが、運がなかったしている。私はテーブルをループする代わりにcursorを使用する必要がありますか

この

CREATE PROCEDURE `UpdateRoster`(inout workShift int(4)) 
BEGIN 
     SELECT workShift 
     FROM roster; 

     CASE 

     WHEN workShift = Mon THEN SET workShift = Tue; 
     WHEN workShift = Tue THEN SET workShift = Wed; 
     WHEN workShift = Wed THEN SET workShift = Thur; 
     WHEN workShift = Thur THEN SET workShift = Fri; 
     WHEN workShift = Fri THEN SET workShift = Sat; 
     WHEN workShift = Sat THEN SET workShift = Sun; 
     WHEN workShift = Sun THEN SET workShift = Mon; 

     END CASE;   
END 

呼び出しの前に更新する:私はこれまで持っているものである

roster employee branch workShift 0001 01 Mon 0001 01 Tues 0001 01 Thurs 0001 01 Sat

コール後に更新する:

roster employee branch workShift 0001 01 Tues 0001 01 Wed 0001 01 Fri 0001 01 Sun

すべてのヘルプは大歓迎です。おかげ

+0

これは実際に_statement_のケースであり、_expression_のケースではありません。 (case式に戻り値がある場合、case文はコードの条件付き実行のためのものです。) – jarlh

+0

@jarlhありがとう。 – Capernicon

+0

_inout_パラメータは必要ありませんか? – jarlh

答えて

0

は、私は100%わからないんだけど、あなたが望むように思われるupdate

UPDATE roster r 
     SET workShift = (CASE WHEN workShift = 'Mon' THEN 'Tue' 
          WHEN workShift = 'Tue' THEN 'Wed' 
          WHEN workShift = 'Wed' THEN 'Thur' 
          WHEN workShift = 'Thur' THEN 'Fri' 
          WHEN workShift = 'Fri' THEN 'Sat' 
          WHEN workShift = 'Sat' THEN 'Sun' 
          WHEN workShift = 'Sun' THEN 'Mon' 
         END); 

これは、あなたが望むかもしれないものの推測があります。私は、このロジックを達成する他の方法もあることに注意する必要があります。

関連する問題