2014年6月6日 星期五

Oracle - 如何在 CURSOR 裡面直接更新該筆資料


正所謂一懶還有一懶懶,
每次看到同事寫的程式裡面有一點是我覺得很奇怪的,
明明我就是抓某個 TABLE 裡面的某些資料出來,
為什麼在 FOR LOOP 裡面要更新那一筆資料的時候,
卻還是下 UPDATE 該 TABLE 然後一堆條件呢?

所以今天在寫個 FUNC 的時候就想說來找一下,
應該會有比較偷懶聰明的寫法吧!
找到了下面這個說明
[Chapter 6] 6.11 SELECT FOR UPDATE in Cursors
看起來應該可以,試了一下,
挑了一種我覺得比較偷懶簡潔的寫法,如下:

   CURSOR CUR_TEST IS
      SELECT *
      FROM TB_TEST
      FOR UPDATE;

只要在 CURSOR 最後面加上 FOR UPDATE 就可以了,很簡單。
然後 FOR LOOP 裡面的寫法也很簡單,如下:

   FOR REC_TEST IN CUR_TEST
   LOOP
      
      UPDATE TB_TEST
      SET CALC_AMT = 10000000 
      WHERE CURRENT OF CUR_TEST;

   END LOOP;

UPDATE 甚麼不是重點,
重點是 WHERE 條件的寫法 CURRENT OF CUR_TEST 就可以了,
夠簡單,讚!

進步始終來自於惰性!共勉之~~~

1 則留言:

  1. 真的是進步始終來自於惰性!謝謝你提供的範例^^

    回覆刪除