Oracle遊標—for、loop、if結合應用

來源:互聯網
上載者:User

標籤:


一、需求


什麼時候會用到Oracle遊標,以及其中的for、loop、if呢?

先看這樣一個需求:

有一張學生授課表T_TEACHING,每個學生都有數門課程:

主鍵ID(自增)
課程號COURSE_ID
學號USER_ID
1
01
201501
2
02
201501
3
03
201501
4
01
201502
5
01
201503
6
01
201504
7
02
201504
...
...
...

但是因為某些原因,導致有的學生課程不全(本應該每個學生都有3門課),應該如何把不全的學生檢索出來,再給這些學生添加課程呢,並且要求能夠快速解決這個問題。


二、分析


我們對需求進行一步步梳理:

1、我們不知道哪個學生課程不全,所以需要迴圈判斷每個學生

通常用for迴圈:for USER_ID in USER_IDS

2、迴圈判斷每個學生就要拿到所有的學號

select:select USER_ID from  T_TEACHING GROUP BY USER_ID;

3、有了學號,判斷這個學生是否缺少課程,然後添加這門課

(1)select:select count(*) from T_TEACHING where [email protected]_ID and [email protected]_ID;

(2)if else 判斷

(3)insert:insert into T_TEACHING(COURSE_ID,USER_ID) values (@COURSE_ID,@USER_ID)

通過分析大致的流程出來了,然後再看細節:

我們通過select ..GROUP BY擷取了授課表中所有的學號,然後就對這些學號進行迴圈擷取,關鍵在於select ..GROUP BY出來如何迴圈擷取。


三、方法


在oracle中提供了“遊標”

  遊標是什麼,遊標用來處理從資料庫中檢索的多行記錄(使用SELECT語句)。利用遊標,程式可以逐個地處理和遍曆一次檢索返回的整個記錄集。

這正是我們想要的!!

結合for迴圈,我們可以使用for迴圈遊標,格式如下:

 --(1)定義遊標    --關鍵字cursor    cursor x is select語句 --(2)定義遊標變數  y x%rowtype --(3)使用for迴圈來使用這個遊標    for y in x loop      --邏輯處理    end loop;

下面我們通過sql預存程序來完整的實現上面的需求

declare       --定義類型       cursor t_tea       is       select USER_ID from T_TEACHING GROUP BY USER_ID;       --定義一個遊標變數       t_row t_tea%rowtype;       --定義一個number類型的臨時變數    v_count number; begin      for t_row in t_tea loop     select count(*) into v_count from T_TEACHING where USER_ID=t_row.USER_ID and COURSE_ID=02;     if v_count = 0 then        insert into T_TEACHING(COURSE_ID,USER_ID) values (02,t_row.USER_ID);     end if;       end loop;end;



四、總結

  

  oracle中的遊標迴圈不只有for迴圈,oracle中提供了兩種遊標,顯示遊標和隱式遊標,其他遊標的使用方式可以在這裡瞭解,用到了在深入研究:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html




Oracle遊標—for、loop、if結合應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.