Domanda

I am new to PL/SQL and I need to create a cursor for loop to update a coulmn called stk_flag to * or null if the total stock value is over $50.

For example Alien Movie_value = 10 * movie_qty = 5 == 50 so then STK_FLAG should be *.

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

My code so far:

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;
È stato utile?

Soluzione

One way to do this would be to use an UPDATE statement:

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

SQLFiddle here

If a cursor FOR loop must be used, try the following:

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;

Share and enjoy.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top