最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql的游標(biāo)的定義使用及關(guān)閉深入分析

 更新時(shí)間:2012年12月18日 17:40:57   作者:  
于游標(biāo)的用法Mysql現(xiàn)在提供的還很特別,雖然使用起來(lái)沒(méi)有PL/SQL那么順手,不過(guò)使用上大致上還是一樣,本文將詳細(xì)介紹一下,需要了解的朋友可以參考下
Mysql從5.0開(kāi)始支持存儲(chǔ)過(guò)程和trigger,給我們喜歡用mysql的朋友們更喜歡mysql的理由了,語(yǔ)法上和PL/SQL有差別,不過(guò)搞過(guò)編程的人都知道,語(yǔ)法不是問(wèn)題,關(guān)鍵是思想,大致了解語(yǔ)法后,就從變量定義,循環(huán),判斷,游標(biāo),異常處理這個(gè)幾個(gè)方面詳細(xì)學(xué)習(xí)了。關(guān)于游標(biāo)的用法Mysql現(xiàn)在提供的還很特別,雖然使用起來(lái)沒(méi)有PL/SQL那么順手,不過(guò)使用上大致上還是一樣,

定義游標(biāo)
declare fetchSeqCursor cursor for select seqname, value from sys_sequence;

使用游標(biāo)
open fetchSeqCursor;
fetch數(shù)據(jù)
fetch cursor into _seqname, _value;

關(guān)閉游標(biāo)
close fetchSeqCursor;
不過(guò)這都是針對(duì)cursor的操作而已,和PL/SQL沒(méi)有什么區(qū)別吧,不過(guò)光是了解到這個(gè)是根本不足以寫(xiě)出Mysql的fetch過(guò)程的,還要了解其他的更深入的知識(shí),我們才能真正的寫(xiě)出好的游標(biāo)使用的procedure
首先f(wàn)etch離不開(kāi)循環(huán)語(yǔ)句,那么先了解一下循環(huán)吧。
我一般使用Loop和while覺(jué)得比較清楚,而且代碼簡(jiǎn)單。

這里使用Loop為例
復(fù)制代碼 代碼如下:

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

現(xiàn)在是死循環(huán),還沒(méi)有退出的條件,那么在這里和oracle有區(qū)別,Oracle的PL/SQL的指針有個(gè)隱性變量%notfound,Mysql是通過(guò)一個(gè)Error handler的聲明來(lái)進(jìn)行判斷的,
declare continue handler for Not found (do some action);
在Mysql里當(dāng)游標(biāo)遍歷溢出時(shí),會(huì)出現(xiàn)一個(gè)預(yù)定義的NOT FOUND的Error,我們處理這個(gè)Error并定義一個(gè)continue的handler就可以叻,關(guān)于Mysql Error handler可以查詢(xún)Mysql手冊(cè)定義一個(gè)flag,在NOT FOUND,標(biāo)示Flag,在Loop里以這個(gè)flag為結(jié)束循環(huán)的判斷就可以叻。
復(fù)制代碼 代碼如下:

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;

這就是一個(gè)完整的過(guò)程叻,那么會(huì)思考的人一般在這里都會(huì)思考,如果是這樣的話(huà),怎樣做嵌套的游標(biāo)循環(huán)叻,這里可以根據(jù)statement block的scope實(shí)現(xiàn)叻,Mysql里通過(guò)begin end來(lái)劃分一個(gè)statement block,在block里定義的變量范圍也在這個(gè)block里,所以關(guān)于嵌套的游標(biāo)循環(huán)我們可以多加一個(gè)begin end來(lái)區(qū)分他們所對(duì)應(yīng)的error handler(注意在Mysql里同一個(gè)error的handler只能定義一次,多定義的話(huà),在compile的過(guò)程中會(huì)提示里duplicate handler defination,所以NOT FOUND的handler就只能定義一次),在一個(gè)begin end里定義這個(gè)里面游標(biāo)的NOT FOUND handler,
復(fù)制代碼 代碼如下:

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;
begin
declare fetchSeqOk boolean default 'inner';
declare cursor2 cursor for select .... from ...;## define the cursor
declare continue handler for NOT FOUND set fetchSeqOk = true; ## define the continue handler for n
ot
set fetchSeqOk = false;
open cursor2;
fetchloop2 loop
if fetchSeqOk then
else
end if;
end loop;
close cursor2;
end;
end if;
end Loop;
close fetchSeqCursor;

這樣就可以輕松實(shí)現(xiàn)更多層次的循環(huán)了,不過(guò)相對(duì)oracle的PL/SQL來(lái)說(shuō),Mysql現(xiàn)在還不支持動(dòng)態(tài)游標(biāo)的定義,所以很強(qiáng)大的動(dòng)態(tài)拼出SQL的在游標(biāo)里還不能做到,不過(guò)這完全不影響我對(duì)Mysql的喜愛(ài)程度,她就想那羞澀的荷花一樣,雖然沒(méi)有燦爛的色彩,但那簡(jiǎn)約的色調(diào),清新而不染一絲鉛塵的高雅,一樣吸引著無(wú)數(shù)的mysql迷么,正如接天蓮葉無(wú)窮碧,映日荷花別樣紅。

:Mysql也有類(lèi)似Oracle里的execute immediate的動(dòng)態(tài)SQL的功能,通過(guò)這個(gè)功能可有多少?gòu)浹a(bǔ)一些動(dòng)態(tài)游標(biāo)的缺憾叻
set @sqlStr='select * from table where condition1 = ?';
prepare s1 for @sqlStr;
execute s1 using @condition1; 如果有多個(gè)參數(shù)用逗號(hào)分隔
deallocate prepare s1; 手工釋放,或者是connection關(guān)閉時(shí),server自動(dòng)回收。

相關(guān)文章

  • MySQL存儲(chǔ)路徑遷移的詳細(xì)步驟

    MySQL存儲(chǔ)路徑遷移的詳細(xì)步驟

    在構(gòu)建Web應(yīng)用程序時(shí),MySQL是存儲(chǔ)數(shù)據(jù)的核心工具,在云服務(wù)器上,正確設(shè)置MySQL的存儲(chǔ)路徑對(duì)應(yīng)用性能至關(guān)重要,通過(guò)遷移,我們不僅解決了空間不足的問(wèn)題,還能讓數(shù)據(jù)庫(kù)運(yùn)行得更快,所以本文將給大家介紹MySQL存儲(chǔ)路徑遷移的詳細(xì)步驟,需要的朋友可以參考下
    2024-06-06
  • Mysql 5.7.19 免安裝版遇到的坑(收藏)

    Mysql 5.7.19 免安裝版遇到的坑(收藏)

    這篇文章給大家分享了mysql 5.7.19免安裝版在安裝過(guò)程中遇到的一些問(wèn)題,以前有mysql服務(wù)的話(huà) 需要去停掉mysql服務(wù)。具體內(nèi)容介紹大家參考下本文
    2017-08-08
  • MySQL一勞永逸永久支持輸入中文的方法實(shí)例

    MySQL一勞永逸永久支持輸入中文的方法實(shí)例

    相信大家在使用MySQL數(shù)據(jù)庫(kù)的過(guò)程中,或多或少都遇到報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于MySQL一勞永逸永久支持輸入中文的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Navicat把csv數(shù)據(jù)導(dǎo)入mysql

    Navicat把csv數(shù)據(jù)導(dǎo)入mysql

    這篇文章主要為大家詳細(xì)介紹了Navicat把csv數(shù)據(jù)導(dǎo)入mysql,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • mysql動(dòng)態(tài)游標(biāo)學(xué)習(xí)(mysql存儲(chǔ)過(guò)程游標(biāo))

    mysql動(dòng)態(tài)游標(biāo)學(xué)習(xí)(mysql存儲(chǔ)過(guò)程游標(biāo))

    mysql動(dòng)態(tài)游標(biāo)示例,通過(guò)準(zhǔn)備語(yǔ)句、視圖和靜態(tài)游標(biāo)實(shí)現(xiàn),大家參考使用吧
    2013-12-12
  • MySQL中crash safe數(shù)據(jù)完整性機(jī)制面試精講

    MySQL中crash safe數(shù)據(jù)完整性機(jī)制面試精講

    這篇文章主要為大家介紹了MySQL數(shù)據(jù)完整性crash safe特性面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • mysql CPU高負(fù)載問(wèn)題排查

    mysql CPU高負(fù)載問(wèn)題排查

    這篇文章主要介紹了mysql CPU高負(fù)載問(wèn)題排查的相關(guān)資料,幫助大家更好的理解和使用MySQL,維護(hù)數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-11-11
  • Mysql中JDBC的三種查詢(xún)(普通、流式、游標(biāo))詳解

    Mysql中JDBC的三種查詢(xún)(普通、流式、游標(biāo))詳解

    這篇文章主要介紹了Mysql中JDBC的三種查詢(xún)(普通、流式、游標(biāo))詳解,JDBC(Java DataBase Connectivity:java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句的Java API,可以為多種關(guān)系型數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),它是由一組用Java語(yǔ)言編寫(xiě)的類(lèi)和接口組成的,需要的朋友可以參考下
    2023-08-08
  • 深入解析MySQL中的longtext與longblob及應(yīng)用場(chǎng)景

    深入解析MySQL中的longtext與longblob及應(yīng)用場(chǎng)景

    MySQL作為廣泛應(yīng)用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),提供了豐富的數(shù)據(jù)類(lèi)型以滿(mǎn)足各種數(shù)據(jù)存儲(chǔ)需求,本文將深入探討MySQL中l(wèi)ongtext和longblob的特性、區(qū)別以及在實(shí)際項(xiàng)目中的應(yīng)用場(chǎng)景,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • MySQL中SQL分頁(yè)查詢(xún)的幾種實(shí)現(xiàn)方法及優(yōu)缺點(diǎn)

    MySQL中SQL分頁(yè)查詢(xún)的幾種實(shí)現(xiàn)方法及優(yōu)缺點(diǎn)

    這篇文章主要介紹了MySQL中SQL分頁(yè)查詢(xún)的幾種實(shí)現(xiàn)方法及優(yōu)缺點(diǎn), 分頁(yè)查詢(xún)就是在滿(mǎn)足條件的一堆有序數(shù)據(jù)中截取當(dāng)前所需要展示的那部分。對(duì)此感興趣的可以來(lái)了解一下
    2020-07-07

最新評(píng)論

高碑店市| 宜丰县| 当涂县| 淮安市| 天台县| 大关县| 远安县| 黄山市| 庐江县| 西充县| 台东市| 郎溪县| 邛崃市| 白银市| 漳浦县| 咸宁市| 惠水县| 高台县| 西吉县| 油尖旺区| 穆棱市| 登封市| 江安县| 会理县| 临泽县| 泸州市| 启东市| 金华市| 涟水县| 达尔| 渝北区| 平乐县| 桂阳县| 宜丰县| 麦盖提县| 兴海县| 贵阳市| 怀远县| 合江县| 阜平县| 湄潭县|