使用CURSOR FOR更新列

时间:2014-05-07 23:51:14

标签: sql plsql cursor

我是PL / SQL的新手,我需要创建一个游标for循环来将名为stk_flag的coulmn更新为*或者如果总库存值超过50美元则为null。

例如Alien Movie_value = 10 * movie_qty = 5 == 50所以那么STK_FLAG应该是*。

ID VALUE QTY STK_FLAG
       1 ------ 10 ------ 5
       2 ------- 8 ------ 3
       3 ------ ------ 15 11
       4 ------ 7 ------ 2
       5 ------ 7 ------ 1
       6 ------ 7 ------- 2
       7 ------ 7 ------- 1
       8 ------ 5 ------ 1
       9 ------ 5 ------ 3
      10 ---- 12 ------ 4
      11 ---- 14 ------ 3
      12 ---- 15 ----- 5

到目前为止我的代码:

DECLARE

 CURSOR cur_movie IS

SELECT movie_value, movie_qty, stk_flag

INTO lv_movie_price, lv_movie_qty

FROM mm_movie

WHERE movie_id = 3;

lv_movie_price NUMBER(5,2);

lv_movie_qty NUMBER(4);

lv_movie_stk NUMBER(3,2);

 BEGIN

 FOR movie_star IN cur_movie LOOP

IF lv_movie_stk >= 75  THEN

  UPDATE mm_movie

  SET stk_flag = '*';

ELSE 

UPDATE mm_movie

  SET stk_flag = 'NULL';

  END IF;

END LOOP;

 END;

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是使用UPDATE语句:

UPDATE MM_MOVIE
  SET STK_FLAG = CASE
                   WHEN MOVIE_VALUE * MOVIE_QTY >= 50 THEN '*'
                   ELSE NULL
                 END;

SQLFiddle here

如果必须使用游标FOR循环,请尝试以下操作:

DECLARE
  CURSOR c1 IS
    SELECT ID, movie_value, movie_qty
      FROM mm_movie;
BEGIN
  FOR aRow IN c1 LOOP
    UPDATE mm_movie
      SET stk_flag = CASE
                       WHEN aRow.MOVIE_VALUE * aRow.MOVIE_QTY >= 50 THEN '*'
                       ELSE NULL
                     END
      WHERE ID = aRow.ID;
  END LOOP;

END;

分享并享受。