成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL 游標的定義與使用

數(shù)據(jù)庫 MySQL
為什么 MySQL 會有游標這個概念,由于 SQL 語言是面向集合的語句,它每次查詢出來都是一堆數(shù)據(jù)的集合,沒有辦法對其中一條記錄進行單獨的處理。如果要對每條記錄進行單獨處理就需要游標。

從字面可以這么理解什么是游標,游標就像是水面上漂浮的一個標記,這個標記可以來回游動,一會游到這里一會游到那里,這里的河水可以理解為是數(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ā)器中都可以使用。

說完概念,就來看下游標的固定寫法。不管概念是否理解,記住下面的固定模式也可以完成搬磚任務。

1、聲明游標

DECLARE 游標名字 CURSOR FOR SELECT 語句;

SELECT 語句就是正常的查詢語句,例如:SELECT id,age FROM table;

2、打開游標

OPEN 游標名字;

在打開游標之前,游標定義的 SQL 語句是不執(zhí)行的。

3、取出記錄

FETCH 游標名字 INTO 變量1[,變量2,變量3];

將當前的記錄數(shù)據(jù)存入變量。

當 FETCH 沒有找到記錄時會拋出異常,異常的定義需要下面的 HANDLER FOR 語句。

聲明游標語句中的 SELECT 如果有多個字段,INTO 后面需要多個變量進行接收。

4、設置結束條件

DECLARE 處理種類 HANDLER FOR 異常的類型 異常發(fā)生時的處理

這個語句的作用是指定一個條件,告訴程序所有數(shù)據(jù)已經循環(huán)完畢,可以結束了。由于游標是使用 WHILE 循環(huán)進行每條數(shù)據(jù)的讀取,就需要給 WHILE 一個結束條件。

處理種類:可以是, EXIT 立即結束。CONTINUE 繼續(xù)下面的處理。

異常的類型:一般指定為 NOT FOUND ,意思是沒有找到任何數(shù)據(jù)。

異常發(fā)生時的處理:當異常發(fā)生時需要做的事情,這里一般改變一個變量的值來記錄異常已經發(fā)生了,如如 SET flat = 1 詳細用法查看下面的例子。

5、關閉游標

CLOSE 游標名字;

實戰(zhàn)代碼:

CREATE PROCEDURE sp_abc()
BEGIN
-- 定義一個臨時存放使用逗號分割的所有客戶名字的變量
DECLARE result VARCHAR(1000) DEFAULT '';

-- 定義一個 flag 變量,用來判斷記錄是否全部取出,我這里設置,1代表沒有記錄,0代表還有記錄。
DECLARE flag INT DEFAULT 0;

-- 定義一個存放當前記錄客戶名字的臨時變量
DECLARE tmp VARCHAR(50) DEFAULT '';

-- 定義游標,在打開游標之前,這個SELECT語句是不執(zhí)行的
DECLARE cur CURSOR FOR SELECT `name` FROM kefu;

-- 設置結束條件,當沒有記錄的時候拋出 NOT FOUND 異常,并設置 flag 等于1
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;

-- 打開游標
OPEN cur;

-- 定義循環(huán),從游標中一條一條的取出記錄
WHILE flag != 1 DO

-- 將 SELECT 語句當前行中的 name 字段保存到 tmp 變量中
-- 如果 SELECT 指定多個字段,INTO 后面就需要跟多個變量,例如:tmp1,tmp2,每個變量單獨存放一個字段的值
FETCH cur INTO tmp;

-- 這里需要判斷一下,因為上面定義異常發(fā)生后繼續(xù)處理 CONTINUE ,當 FETCH 發(fā)生異常時 tmp 沒有得到正確的值。所以 IF 內的語句塊不應該被執(zhí)行。
IF flag != 1 THEN
SET result = CONCAT_WS(',',result ,tmp);
END IF;

END WHILE;

-- 關閉游標
CLOSE cur;

-- 最后你可以根據(jù)你的情況來處理這個 result 變量了
SELECT result;

END;

完畢,看懂沒,如果沒看懂沒關系,游標處理是一套固定的格式,按照上面例子中固定的格式套入到你的程序就可以了。

責任編輯:華軒 來源: 今日頭條
相關推薦

2010-05-26 16:41:09

MySQL 游標

2010-05-31 17:06:35

MySQL游標

2010-04-21 15:10:35

Oracle游標

2010-10-09 16:41:54

MYSQL存儲過程

2010-04-21 15:02:50

Oracle使用游標

2010-07-26 10:59:59

SQL Server游

2011-04-15 13:12:08

DB2游標

2010-04-21 15:52:45

Oracle游標

2010-09-01 15:09:41

DB2動態(tài)游標

2010-05-06 11:02:26

Oracle游標

2010-09-10 16:20:10

SQL函數(shù)

2010-05-07 12:07:08

Oracle 多層游標

2010-09-08 09:11:42

SQL游標語法

2010-09-01 15:15:20

DB2動態(tài)游標

2011-07-29 10:36:43

游標Oracle數(shù)據(jù)庫

2010-08-13 13:40:47

DB2編程序

2010-07-01 14:36:34

SQL Server動

2010-07-14 15:32:28

SQL Server

2010-08-05 14:24:37

DB2存儲過程

2011-07-21 16:28:20

MySQL數(shù)據(jù)庫帶游標的存儲過程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠干2020| 99视频免费播放 | 亚洲国产精品成人无久久精品 | 国产亚洲区 | 亚洲一二三区在线观看 | 国产免费福利小视频 | 亚洲国产成人精品久久 | 亚洲成人综合社区 | 亚洲一区二区在线电影 | 日日夜夜天天干 | 国产亚洲人成a在线v网站 | 国产91一区 | 天天草视频 | 91大片| 欧美成人激情 | 国产乱码精品一品二品 | 找个黄色片 | 国产国语精品 | 国产精品日韩一区 | 久婷婷| 欧美一级片在线观看 | 日本久久精品视频 | 中文字幕一区二区三区四区五区 | 国产精品视频播放 | 九一视频在线播放 | 国产成人麻豆免费观看 | 九九热精品在线 | 久久99网| 亚洲一区中文字幕 | 99久久精品免费 | 欧美激情精品久久久久久免费 | 黄色大片免费网站 | 久久久久久久久久久久久91 | 欧美日韩一区二区三区视频 | 99成人在线视频 | 成人二区| 精品毛片| 日日操操操| 日本高清精品 | 天堂三级| 国产成人精品一区二区三区网站观看 |