国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

Mysql的游標的定義使用及關閉深入分析

2024-07-24 12:48:51
字體:
來源:轉載
供稿:網友
Mysql從5.0開始支持存儲過程和trigger,給我們喜歡用mysql的朋友們更喜歡mysql的理由了,語法上和PL/SQL有差別,不過搞過編程的人都知道,語法不是問題,關鍵是思想,大致了解語法后,就從變量定義,循環,判斷,游標,異常處理這個幾個方面詳細學習了。關于游標的用法Mysql現在提供的還很特別,雖然使用起來沒有PL/SQL那么順手,不過使用上大致上還是一樣,

定義游標
declare fetchSeqCursor cursor for select seqname, value from sys_sequence;

使用游標
open fetchSeqCursor;
fetch數據
fetch cursor into _seqname, _value;

關閉游標
close fetchSeqCursor;
不過這都是針對cursor的操作而已,和PL/SQL沒有什么區別吧,不過光是了解到這個是根本不足以寫出Mysql的fetch過程的,還要了解其他的更深入的知識,我們才能真正的寫出好的游標使用的procedure
首先fetch離不開循環語句,那么先了解一下循環吧。
我一般使用Loop和while覺得比較清楚,而且代碼簡單。

這里使用Loop為例
復制代碼 代碼如下:

fetchSeqLoop:Loop
fetch cursor into _seqname, _value;
end Loop;

現在是死循環,還沒有退出的條件,那么在這里和oracle有區別,Oracle的PL/SQL的指針有個隱性變量%notfound,Mysql是通過一個Error handler的聲明來進行判斷的,
declare continue handler for Not found (do some action);
在Mysql里當游標遍歷溢出時,會出現一個預定義的NOT FOUND的Error,我們處理這個Error并定義一個continue的handler就可以叻,關于Mysql Error handler可以查詢Mysql手冊定義一個flag,在NOT FOUND,標示Flag,在Loop里以這個flag為結束循環的判斷就可以叻。
復制代碼 代碼如下:

declare fetchSeqOk boolean; ## define the flag for loop judgement
declare _seqname varchar(50); ## define the varient for store the data
declare _value bigint(20);
declare fetchSeqCursor cursor for select seqname, value from sys_sequence;## define the cursor
declare continue handler for NOT FOUND set fetchSeqOk = true; ## define the continue handler for not
found flag
set fetchSeqOk = false;
open fetchSeqCursor;
fetchSeqLoop:Loop
if fetchSeqOk then
leave fetchSeqLoop;
else
fetch cursor into _seqname, _value;
select _seqname, _value;
end if;
end Loop;
close fetchSeqCursor;

這就是一個完整的過程叻,那么會思考的人一般在這里都會思考,如果是這樣的話,怎樣做嵌套的游標循環叻,這里可以根據statement block的scope實現叻,Mysql里通過begin end來劃分一個statement block,在block里定義的變量范圍也在這個block里,所以關于嵌套的游標循環我們可以多加一個begin end來區分他們所對應的error handler(注意在Mysql里同一個error的handler只能定義一次,多定義的話,在compile的過程中會提示里duplicate handler defination,所以NOT FOUND的handler就只能定義一次),在一個begin end里定義這個里面游標的NOT FOUND handler,
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 明星| 乡宁县| 青龙| 乌拉特前旗| 海林市| 施甸县| 巢湖市| 龙山县| 西城区| 镇江市| 长海县| 墨脱县| 和田县| 丽江市| 安远县| 金乡县| 彭泽县| 正镶白旗| 邵阳市| 新河县| 昌吉市| 莒南县| 来凤县| 改则县| 林甸县| 营口市| 扎鲁特旗| 马山县| 靖远县| 莱芜市| 晋城| 道真| 福清市| 盐城市| 承德市| 丰城市| 浦东新区| 南郑县| 建始县| 乐清市| 建湖县|