當需要從數據庫中同時讀取多條記錄的時候,就需要使用游標進行操作。游標CURSOR是一個與SELECT語句相關聯的符號名,游標的最大好處是可以讓用戶逐行的訪問表中的記錄。使用游標的典型的過程如下:
????? ?1)用DECLARE關鍵字聲明游標。
????? ?2)使用OPEN語句打開游標
????? ?3)使用FETCH語句讀取一行數據
?????? 4)處理數據
?????? 5)判斷是否已經讀取完所有的數據,未讀完數據的話,GOTO步驟3
????? ?6)使用CLOSE關鍵字關閉游標
?
??? (1)DECLARE 語句
???? 在使用游標之前,需要使用DECLARE語句聲明游標,使用DECLARE語句聲明游標的格式如下:
?????????
DECLARE CursorName CURSOR FOR SelectStatement
????????? [USING TransactionObject]
???? 其中CursorName是游標的名稱,可以使用任何有效的標識符來表示;SelectStatement是任何有效的Select語句;TransactionObject是事務對象名,默認時使用SQLCA(SQL通信區).
???? 例如,下面的語句聲明了一個名字叫做student_sur的游標,該游標使用了默認事務對象SQLCA和一個變量le_sex,其作用就是選取某個性別的所有的學生的學號和姓名:
?????????? DECLARE? student_cur CURSOR FOR
?????????? SELECT student,student_id,student.student_name
?????????? FROM student WHERE student.sex=:ls_sex
???? DECLARE是個聲明語句,可以像聲明標準數據類型那樣把游標聲明稱局部變量,實例變量或者是全局變量.它并不真正的執行,因此在DECLARE語句后,也無須檢查事務對象的SQLCode屬性.
值得注意的是DECLARE雖然是一個聲明語句,但是仍舊需要使用分號作為結束符.
?
???? (2)OPEN語句
???? OPEN語句打開已經聲明的游標并且執行相應的SELECT語句,其語法格式是:
?????????
OPEN CursorName;
???? 其中,CursorName是已經使用DECLARE語句聲明的游標名,例如:
????????? open student_cur;
?
?? (3)FETCH語句
?????FETCH語句從游標中讀取當前記錄并且把它保存到指定的變量中,只要數據庫支持,還可以使用FECTH FIRST,FETCH PRIOR,FETCH LAST。FETCH語句的語法格式為:
?????????
FETCH CursorName INTO VariableList
???? 其中,CursorName是OPEN語句打開的游標名;VariableList是與Select語句中選擇字段相對應的變量列表,例如,對前面DECLARE語句說明的游標,可以使用下面的語句讀取記錄:
????????? string ls_student,ls_student_name
????????? FETCH student_cur INTO :ls_student_id,:ls_student_name;
???? 每執行一次FETCH語句都會從游標中讀取一行記錄,需要讀取多行記錄時需要反復調用FETCH語句.執行FETCH語句之后,應該檢查事務對象的SQLCode屬性,該屬性為
0
的時候,表明成功的讀取當前的記錄,如果SQLCode為
-1
的時候,表明讀取當前的記錄失敗,為
100
的時候,表明已經讀取完了所有的記錄.
?
???? (4)CLOSE語句
???? CLOSE語句關閉先前打開的游標.其語法格式為
?????????
CLOSE CursorName;
???? 其中,Cursorname是先前打開的游標的名稱.
???? 關閉游標之后,就不能再使用FETCH語句從游標中讀取數據了,下面是關閉游標的示例:
????????? CLOSE student_cur;
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
