這篇文章主要介紹了中怎么使用游標,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著(zhù)大家一起了解一下。
要明白什么是游標,首先要了解存儲過(guò)程,存儲過(guò)程是事先經(jīng)過(guò)編譯并且存儲在數據庫中的一段SQL語(yǔ)句,他可以接受參數,也可以在其中使用IF
語(yǔ)句、設置變量、循環(huán)等,比如下面語(yǔ)句用于創(chuàng )建一個(gè)存儲過(guò)程?!鞠嚓P(guān)推薦:mysql視頻教程】
delimiter $$ create procedure select_all() begin select * from user; end;$$
調用存儲過(guò)程。
mysql> call select_all;$$
存儲過(guò)程可以減少數據庫和應用之間的傳輸,對提供數據庫處理效率還是有好處的,而游標(Cursor)有的地方又叫光標,可以在存儲過(guò)程中,對結果集進(jìn)行循環(huán)處理,但是目前,MySQL只允許我們從SELECT
語(yǔ)句從頭到尾獲取結果集中的每一行,無(wú)法從最后一行獲取到第一行,也無(wú)法直接跳轉到結果集中的指定行。
使用游標有以下幾個(gè)步驟。
1、游標定義
DECLARE cursor_name CURSOR FOR select_statement
2、打開(kāi)游標
OPEN cursor_name;
3、獲取游標中的數據
FETCH cursor_name INTO var_name [, var_name]...
4、關(guān)閉光標
CLOSE cursor_name;
5、釋放光標
DEALLOCATE cursor_name;
創(chuàng )建表
CREATE TABLE cursor_table (id INT ,name VARCHAR(10),age INT )ENGINE=innoDB DEFAULT CHARSET=utf8; insert into cursor_table values(1, '張三', 500); insert into cursor_table values(2, '李四', 200); insert into cursor_table values(3, '王五', 100); insert into cursor_table values(4, '老六', 20); create table cursor_table_user(name varchar(10));
下面我們通過(guò)游標,遍歷cursor_table表,把年齡大于30的人名存放到cursor_table_user
drop procedure getTotal; delete from cursor_table_user ; CREATE PROCEDURE getTotal() BEGIN DECLARE total INT; DECLARE sid INT; DECLARE sname VARCHAR(10); DECLARE sage INT; DECLARE done INT DEFAULT false; DECLARE cur CURSOR FOR SELECT id,name,age from cursor_table where age>30; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true; SET total = 0; OPEN cur; FETCH cur INTO sid, sname, sage; WHILE(NOT done) DO insert cursor_table_user values(sname); SET total = total + 1; FETCH cur INTO sid, sname, sage; END WHILE; CLOSE cur; SELECT total; END
call getTotal(); mysql> select * from cursor_table_user; +--------+ | name | +--------+ | 張三 | | 李四 | | 王五 | +--------+ 3 rows in set (0.00 sec)
這段程序有一行非常重要,DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
,他表示如果游標或SELECT語(yǔ)句沒(méi)有數據的時(shí)候,將done
變量的值設置 為 true,用來(lái)退出循環(huán)。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站