mysql的游標(biāo)是不能放到循環(huán)中創(chuàng)建的。你想要實(shí)現(xiàn)你原有功能的話,可以把第二個(gè)游標(biāo)定義到另外一個(gè)存儲(chǔ)過程中,然后在創(chuàng)建第二個(gè)游標(biāo)的地方改成調(diào)用新建的存儲(chǔ)過程(CALL PROC_NAME()),并且把你循環(huán)第二個(gè)游標(biāo)想做的事也放到新建的存儲(chǔ)過程里面去,就ok了
10年積累的成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有廣南免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
從字面可以這么理解什么是游標(biāo),游標(biāo)就像是水面上漂浮的一個(gè)標(biāo)記,這個(gè)標(biāo)記可以來回游動(dòng),一會(huì)游到這里一會(huì)游到那里,這里的河水可以理解為是數(shù)據(jù)的集合,這個(gè)標(biāo)記就是在這些數(shù)據(jù)間來回游動(dòng)。
為什么 MySQL 會(huì)有游標(biāo)這個(gè)概念,由于 SQL 語言是面向集合的語句,它每次查詢出來都是一堆數(shù)據(jù)的集合,沒有辦法對(duì)其中一條記錄進(jìn)行單獨(dú)的處理。如果要對(duì)每條記錄進(jìn)行單獨(dú)處理就需要游標(biāo)。
游標(biāo)其實(shí)就像是編程語言中的 for/foreach 循環(huán),把一個(gè)數(shù)組(數(shù)據(jù)的集合)中每條數(shù)據(jù)一條一條地循環(huán)出來,然后你在 for/foreach 循環(huán)中使用判斷語句對(duì)你感興趣的數(shù)據(jù)進(jìn)行處理。
哪里可以使用游標(biāo)呢,函數(shù),存儲(chǔ)過程,觸發(fā)器中都可以使用。
說完概念,就來看下游標(biāo)的固定寫法。不管概念是否理解,記住下面的固定模式也可以完成搬磚任務(wù)。
1、聲明游標(biāo)
SELECT 語句就是正常的查詢語句,例如:SELECT id,age FROM table;
2、打開游標(biāo)
在打開游標(biāo)之前,游標(biāo)定義的 SQL 語句是不執(zhí)行的。
3、取出記錄
將當(dāng)前的記錄數(shù)據(jù)存入變量。
當(dāng) FETCH 沒有找到記錄時(shí)會(huì)拋出異常,異常的定義需要下面的 HANDLER FOR 語句。
聲明游標(biāo)語句中的 SELECT 如果有多個(gè)字段,INTO 后面需要多個(gè)變量進(jìn)行接收。
4、設(shè)置結(jié)束條件
這個(gè)語句的作用是指定一個(gè)條件,告訴程序所有數(shù)據(jù)已經(jīng)循環(huán)完畢,可以結(jié)束了。由于游標(biāo)是使用 WHILE 循環(huán)進(jìn)行每條數(shù)據(jù)的讀取,就需要給 WHILE 一個(gè)結(jié)束條件。
處理種類:可以是, EXIT 立即結(jié)束。CONTINUE 繼續(xù)下面的處理。
異常的類型:一般指定為 NOT FOUND ,意思是沒有找到任何數(shù)據(jù)。
異常發(fā)生時(shí)的處理:當(dāng)異常發(fā)生時(shí)需要做的事情,這里一般改變一個(gè)變量的值來記錄異常已經(jīng)發(fā)生了,如如 SET flat = 1 詳細(xì)用法查看下面的例子。
5、關(guān)閉游標(biāo)
實(shí)戰(zhàn)代碼:
完畢,看懂沒,如果沒看懂沒關(guān)系,游標(biāo)處理是一套固定的格式,按照上面例子中固定的格式套入到你的程序就可以了。
先聲明一個(gè)游標(biāo),語法:
DECLARE v_1 VARCHAR(16);
DECLARE v_2 VARCHAR(16);
DECLARE c_XXX CURSOR FOR
SELECT c_1, c_2
FROM t_1;
同時(shí)聲明一個(gè)布爾型的變量FOUND,當(dāng)循環(huán)的條件不成立時(shí),結(jié)束循環(huán)用的。
DECLARE FOUND BOOLEAN DEFAULT TRUE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET FOUND = FALSE;
在使用游標(biāo)的時(shí)候,要先打開游標(biāo),語法:OPEN c_XXX;
使用的時(shí)候,要先打開游標(biāo),取出第一條數(shù)據(jù),語法: FETCH c_XXX INTO v_1, v_2;
然后才開始執(zhí)行循環(huán),語法:WHILE FOUND DO
執(zhí)行需要執(zhí)行的語句;
取下一條數(shù)據(jù)放到當(dāng)前游標(biāo)中,F(xiàn)ETCH c_XXX INTO v_1, v_2;
結(jié)束循環(huán),語法:END WHILE;
結(jié)束游標(biāo),語法:CLOSE c_cargo。有什么問題我們?cè)贉贤ò 2恢滥憔唧w要問題的是什么。
本文題目:mysql怎么聲明游標(biāo) mysql創(chuàng)建游標(biāo)代碼
轉(zhuǎn)載源于:http://vcdvsql.cn/article34/doicise.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、小程序開發(fā)、網(wǎng)站導(dǎo)航、微信小程序、網(wǎng)站建設(shè)、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)