甚么時候會用到Oracle游標,和其中的for、loop、if呢?
先看這樣1個需求:
有1張學生授課表T_TEACHING,每一個學生都有數(shù)門課程:
主鍵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步步梳理:
1、我們不知道哪一個學生課程不全,所以需要循環(huán)判斷每一個學生
通經(jīng)常使用for循環(huán):for USER_ID in USER_IDS
2、循環(huán)判斷每一個學生就要拿到所有的學號
select:select USER_ID from T_TEACHING GROUP BY USER_ID;
3、有了學號,判斷這個學生是不是缺少課程,然后添加這門課
(1)select:select count(*) from T_TEACHING where USER_ID=@USER_ID and COURSE_ID=@COURSE_ID;
(2)if else 判斷
(3)insert:insert into T_TEACHING(COURSE_ID,USER_ID) values (@COURSE_ID,@USER_ID)
通過分析大致的流程出來了,然后再看細節(jié):
我們通過select ..GROUP BY獲得了授課表中所有的學號,然后就對這些學號進行循環(huán)獲得,關(guān)鍵在于select ..GROUP BY出來如何循環(huán)獲得。
在oracle中提供了“游標”
游標是甚么,游標用來處理從數(shù)據(jù)庫中檢索的多行記錄(使用SELECT語句)。利用游標,程序可以逐一地處理和遍歷1次檢索返回的全部記錄集。
這正是我們想要的!!
結(jié)合for循環(huán),我們可使用for循環(huán)游標,格式以下:
下面我們通過sql存儲進程來完全的實現(xiàn)上面的需求
oracle中的游標循環(huán)不只有for循環(huán),oracle中提供了兩種游標,顯示游標和隱式游標,其他游標的使用方式可以在這里了解,用到了在深入研究:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html
上一篇 Opencv鼠標事件