先聲明一個游標,語法:
肥鄉(xiāng)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
DECLARE v_1 VARCHAR(16);
DECLARE v_2 VARCHAR(16);
DECLARE c_XXX CURSOR FOR
SELECT c_1, c_2
FROM t_1;
同時聲明一個布爾型的變量FOUND,當(dāng)循環(huán)的條件不成立時,結(jié)束循環(huán)用的。
DECLARE FOUND BOOLEAN DEFAULT TRUE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET FOUND = FALSE;
在使用游標的時候,要先打開游標,語法:OPEN c_XXX;
使用的時候,要先打開游標,取出第一條數(shù)據(jù),語法: FETCH c_XXX INTO v_1, v_2;
然后才開始執(zhí)行循環(huán),語法:WHILE FOUND DO
執(zhí)行需要執(zhí)行的語句;
取下一條數(shù)據(jù)放到當(dāng)前游標中,F(xiàn)ETCH c_XXX INTO v_1, v_2;
結(jié)束循環(huán),語法:END WHILE;
結(jié)束游標,語法:CLOSE c_cargo。有什么問題我們再溝通啊。不知道你具體要問題的是什么。
從字面可以這么理解什么是游標,游標就像是水面上漂浮的一個標記,這個標記可以來回游動,一會游到這里一會游到那里,這里的河水可以理解為是數(shù)據(jù)的集合,這個標記就是在這些數(shù)據(jù)間來回游動。
為什么 MySQL 會有游標這個概念,由于 SQL 語言是面向集合的語句,它每次查詢出來都是一堆數(shù)據(jù)的集合,沒有辦法對其中一條記錄進行單獨的處理。如果要對每條記錄進行單獨處理就需要游標。
游標其實就像是編程語言中的 for/foreach 循環(huán),把一個數(shù)組(數(shù)據(jù)的集合)中每條數(shù)據(jù)一條一條地循環(huán)出來,然后你在 for/foreach 循環(huán)中使用判斷語句對你感興趣的數(shù)據(jù)進行處理。
哪里可以使用游標呢,函數(shù),存儲過程,觸發(fā)器中都可以使用。
說完概念,就來看下游標的固定寫法。不管概念是否理解,記住下面的固定模式也可以完成搬磚任務(wù)。
1、聲明游標
SELECT 語句就是正常的查詢語句,例如:SELECT id,age FROM table;
2、打開游標
在打開游標之前,游標定義的 SQL 語句是不執(zhí)行的。
3、取出記錄
將當(dāng)前的記錄數(shù)據(jù)存入變量。
當(dāng) FETCH 沒有找到記錄時會拋出異常,異常的定義需要下面的 HANDLER FOR 語句。
聲明游標語句中的 SELECT 如果有多個字段,INTO 后面需要多個變量進行接收。
4、設(shè)置結(jié)束條件
這個語句的作用是指定一個條件,告訴程序所有數(shù)據(jù)已經(jīng)循環(huán)完畢,可以結(jié)束了。由于游標是使用 WHILE 循環(huán)進行每條數(shù)據(jù)的讀取,就需要給 WHILE 一個結(jié)束條件。
處理種類:可以是, EXIT 立即結(jié)束。CONTINUE 繼續(xù)下面的處理。
異常的類型:一般指定為 NOT FOUND ,意思是沒有找到任何數(shù)據(jù)。
異常發(fā)生時的處理:當(dāng)異常發(fā)生時需要做的事情,這里一般改變一個變量的值來記錄異常已經(jīng)發(fā)生了,如如 SET flat = 1 詳細用法查看下面的例子。
5、關(guān)閉游標
實戰(zhàn)代碼:
完畢,看懂沒,如果沒看懂沒關(guān)系,游標處理是一套固定的格式,按照上面例子中固定的格式套入到你的程序就可以了。
比較基礎(chǔ)的
可以用在存儲過程的SQL語句主要有以下類型:
1、
無返回結(jié)果語句,如:INSERT,UPDATE,DROP,
DELETE等
2、
select語句返回單行變量并可傳給本地變量(select
..into)
3、
返回多行結(jié)果集的select語句,并可使用游標循環(huán)處理
注意,存儲過程返回的多行結(jié)果集,可以被客戶端程序(如php)所接收,但要在一個存儲過程中接收另一個存儲過程的結(jié)果集是不可能的,一般解決辦法是存入臨時表供其它過程共用
4、
prepare語句
以下主要講述游標及prepare部分
游標
定義
DECLARE
cursor_name
CURSOR
FOR
SELECT_statement;
游標操作
OPEN
打開游標
OPEN
cursor_name;
FETCH
獲取游標當(dāng)前指針的記錄,并傳給指定變量列表,注意變量數(shù)必須與游標返回的字段數(shù)一致,要獲得多行數(shù)據(jù),使用循環(huán)語句去執(zhí)行FETCH
FETCH
cursor_name
INTO
variable
list;
CLOSE關(guān)閉游標
CLOSE
cursor_name
;
注意:mysql的游標是向前只讀的,也就是說,你只能順序地從開始往后讀取結(jié)果集,不能從后往前,也不能直接跳到中間的記錄.
一個完整的例子:
--
定義本地變量
DECLARE
o
varchar(128);
--
定義游標
DECLARE
ordernumbers
CURSOR
FOR
SELECT
callee_name
FROM
account_tbl
where
acct_timeduration=10800;
DECLARE
CONTINUE
HANDLER
FOR
NOT
FOUND
SET
no_more_departments=1;
SET
no_more_departments=0;
--
打開游標
OPEN
ordernumbers;
--
循環(huán)所有的行
REPEAT
--
Get
order
number
FETCH
ordernumbers
INTO
o;
update
account
set
allMoney=allMoney+72,lastMonthConsume=lastMonthConsume-72
where
NumTg=@o;
--
循環(huán)結(jié)束
UNTIL
no_more_departments
END
REPEAT;
--
關(guān)閉游標
CLOSE
ordernumbers;
游標:能夠?qū)Y(jié)果集中的每一條記錄進行定位,并對指向的記錄中的數(shù)據(jù)進行操作的數(shù)據(jù)結(jié)構(gòu)。
創(chuàng)建游標: CREATE FUNCTION 函數(shù)名稱 (參數(shù))RETURNS 數(shù)據(jù)類型 程序體
存儲過程中使用游標的4個步驟:定義游標、打開游標、讀取游標數(shù)據(jù)和關(guān)閉游標。
定義游標: DECLARE 游標名 CURSOR FOR 查詢語句
打開游標: OPEN 游標名稱;
讀取游標數(shù)據(jù): FETCH 游標名 INTO 變量列表;
關(guān)閉游標: CLOSE 游標名;
條件處理語句: DECLARE 處理方式[CONTINUE 或EXIT] HANDLER FOR 問題 操作;
流程控制語句:跳轉(zhuǎn)語句(ITERATE語句和LEAVE語句)、循環(huán)語句(LOOP、WHILE、REPEAT)、條件判斷語句(IF語句和CASE語句)
創(chuàng)建游標: CREATE FUNCTION 函數(shù)名稱 (參數(shù))RETURNS 數(shù)據(jù)類型 程序體
存儲函數(shù)與存儲過程很像,但有幾個不同點:
1、存儲函數(shù)必須返回一個值或者數(shù)據(jù)表,存儲過程可以不返回。
2、存儲過程可以通過CALL語句調(diào)用,存儲函數(shù)不可以
3、存儲函數(shù)可以放在查詢語句中使用,存儲過程不可以
4、存儲過程的功能更強大,包括能夠執(zhí)行對表的操作(比如創(chuàng)建表、刪除表等)和事務(wù)操作
游標操作步驟包含4個:定義游標、打開游標、讀取游標數(shù)據(jù)和關(guān)閉游標。
1、創(chuàng)建存儲過程
當(dāng)前文章:mysql游標怎么學(xué) java mysql游標
標題鏈接:http://bm7419.com/article42/ddejphc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、軟件開發(fā)、微信小程序、網(wǎng)站建設(shè)、建站公司、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)