自定義View系列教程00–推翻自己和過往,重學(xué)自定義View
自定義View系列教程01–常用工具介紹
自定義View系列教程02–onMeasure源碼詳盡分析
自定義View系列教程03–onLayout源碼詳盡分析
自定義View系列教程04–Draw源碼分析及其實(shí)踐
自定義View系列教程05–示例分析
自定義View系列教程06–詳解View的Touch事件處理
自定義View系列教程07–詳解ViewGroup分發(fā)Touch事件
自定義View系列教程08–滑動(dòng)沖突的產(chǎn)生及其處理
探索Android軟鍵盤的疑難雜癥
深入探討Android異步精髓Handler
詳解Android主流框架不可或缺的基石
站在源碼的肩膀上全解Scroller工作機(jī)制
Android多分辨率適配框架(1)— 核心基礎(chǔ)
Android多分辨率適配框架(2)— 原理剖析
Android多分辨率適配框架(3)— 使用指南
Android程序員C語言自學(xué)完備手冊(cè)
講給Android程序員看的前端系列教程(圖文版)
講給Android程序員看的前端系列教程(視頻版)
在開發(fā)過程中,我們經(jīng)常會(huì)遇到重復(fù)使用某一功能的情況。為此,MySQL引人了存儲(chǔ)過程(Stored Procedure)這一技術(shù)。所謂存儲(chǔ)過程指的就是一條或多條SQL語句的集合。存儲(chǔ)過程可以將一些列復(fù)雜操作封裝成一個(gè)代碼塊,以便重復(fù)使用,從而極大地減少數(shù)據(jù)庫開發(fā)人的工作量提升開發(fā)效率。SQL語句需要先編譯然后執(zhí)行,而存儲(chǔ)過程可將為了完成特定功能的SQL語句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中,用戶通過指定存儲(chǔ)過程的名字通過傳參的方式對(duì)其進(jìn)行調(diào)用。存儲(chǔ)過程可看做是編程的函數(shù),它允許以傳參調(diào)用的訪問方式。
第一步
準(zhǔn)備數(shù)據(jù),代碼如下:
DROP TABLE IF EXISTS student;CREATE TABLE student ( sid CHAR(6), sname VARCHAR(50), age INT, gender VARCHAR(50) DEFAULT 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');
創(chuàng)建學(xué)生表并插入數(shù)據(jù)。
第二步
編寫存儲(chǔ)過程,代碼如下:
mysql> DELIMITER //mysql> CREATE PROCEDURE procedureHelloWorld(IN sage INT) -> BEGIN -> SELECT * FROM student WHERE age>sage; -> END //Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;
在該存儲(chǔ)過程中我們期望依據(jù)傳入的指定年紀(jì)查詢出符合條件的學(xué)生;詳解如下:
;
為分隔符,如果沒有聲明分割符,則編譯器會(huì)把存儲(chǔ)過程當(dāng)成SQL語句進(jìn)行處理從而造成編譯過程會(huì)報(bào)錯(cuò)。所以需要事先用DELIMITER //
聲明當(dāng)前段分隔符,讓編譯器把兩個(gè)//
之間的內(nèi)容當(dāng)做存儲(chǔ)過程的代碼。在編寫完存儲(chǔ)過程之后利用DELIMITER ;
把分隔符還原為默認(rèn)分隔符;
。DELIMITER也可以指定其他符號(hào)作為結(jié)束符。需要格外注意的是:DELIMITER與要設(shè)定的結(jié)束符之間一定要有一個(gè)空格,否則設(shè)定無效。CREATE PROCEDURE 存儲(chǔ)過程名稱(參數(shù))
創(chuàng)建存儲(chǔ)過程,即示例代碼:CREATE PROCEDURE procedureHelloWorld(IN sage INT)
BEGIN
開始以END
結(jié)束圖示如下:
調(diào)用存儲(chǔ)過程,代碼如下:
call procedureHelloWorld(15);
利用call 存儲(chǔ)過程名(參數(shù));
調(diào)用存儲(chǔ)過程,即示例代碼:call procedureHelloWorld(15);
類似地,可利用DROP PROCEDURE 存儲(chǔ)過程名;
刪除存儲(chǔ)過程。
結(jié)果如下:
至此,我們完成了存儲(chǔ)過程的入門程序。假若您沒有完全看懂該代碼也無關(guān)緊要,畢竟只是讓大家對(duì)存儲(chǔ)過程先有個(gè)大概了解;接下來,我們將從基礎(chǔ)語法開始全面深入地學(xué)習(xí)存儲(chǔ)過程。
MySQL存儲(chǔ)過程的定義中可不傳參,假若傳參則有三種類型:IN,OUT,INOUT,形式如下:
CREATE PROCEDURE 存儲(chǔ)過程名([[IN |OUT |INOUT ] 參數(shù)名 數(shù)據(jù)類型...])
IN表示輸入?yún)?shù),表示該參數(shù)的值必須在調(diào)用存儲(chǔ)過程時(shí)指定
OUT表示輸出參數(shù),可在存儲(chǔ)過程內(nèi)改變?cè)撝挡⑵浞祷?/p>
INOUT表示輸入輸出參數(shù),可在調(diào)用存儲(chǔ)過程時(shí)指定該參數(shù)并在存儲(chǔ)體中改變?cè)撝挡⑵浞祷?/p>
示例代碼如下:
mysql> DELIMITER //mysql> CREATE PROCEDURE findStudent(IN sage INT) -> BEGIN -> SELECT * FROM student WHERE age=sage; -> END //Query OK, 0 rows affected (0.01 sec)mysql> DELIMITER ;mysql> call findStudent(16);
在此定義存儲(chǔ)過程findStudent,該存儲(chǔ)過程中有個(gè)IN參數(shù),該參數(shù)為INT類型叫做sage
圖示如下:
call findStudent(16);
并出入16作為IN參數(shù)調(diào)用存儲(chǔ)過程。其實(shí),我們還可以在調(diào)用存儲(chǔ)過程中使用用戶變量。
用戶變量語法,形式如下:
@var_name
創(chuàng)建用戶變量,方式如下:
SET 用戶變量=初始值;
查看用戶變量的值,方式如下:
SELECT 用戶變量;
當(dāng)定義用戶變量后可方便開發(fā)過程的代碼編寫,只要連接未關(guān)閉我們均可直接使用該變量。當(dāng)然,當(dāng)連接關(guān)閉時(shí)所有客戶變量將自動(dòng)釋放。
示例如下:
mysql> SET @age=16;Query OK, 0 rows affected (0.00 sec)mysql> call findStudent(@age);
示例代碼如下:
mysql> DROP PROCEDURE IF EXISTS countStudent;Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER //mysql> CREATE PROCEDURE countStudent(OUT total INT) -> BEGIN -> SELECT COUNT(*) INTO total FROM student; -> END //Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;mysql>mysql> SET @number=0;Query OK, 0 rows affected (0.00 sec)mysql>mysql> CALL countStudent(@number);Query OK, 1 row affected (0.00 sec)mysql> SELECT @number;
定義存儲(chǔ)過程countStudent,該存儲(chǔ)過程中有個(gè)OUT參數(shù),該參數(shù)為INT類型叫做total。在存儲(chǔ)體中將統(tǒng)計(jì)的結(jié)果利用INTO
存入total中。在調(diào)用存儲(chǔ)過程中將用戶變量@number作為參數(shù)傳入,然后利用SELECT @number
參看結(jié)果。
圖示如下:
示例代碼如下:
mysql> DROP PROCEDURE IF EXISTS searchStudentGender;Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER //mysql> CREATE PROCEDURE searchStudentGender(INOUT message VARCHAR(50)) -> BEGIN -> SELECT gender INTO message FROM student WHERE sname=message; -> END //Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;mysql>mysql> SET @info='lili';Query OK, 0 rows affected (0.00 sec)mysql> CALL searchStudentGender(@info);Query OK, 1 row affected (0.00 sec)mysql> SELECT @info;
定義存儲(chǔ)過程searchStudentGender,該存儲(chǔ)過程中有個(gè)INOUT參數(shù),該參數(shù)為VARCHAR(50)類型叫做message。在該示例中message既當(dāng)做輸入?yún)?shù)又當(dāng)做輸出參數(shù),即輸入?yún)?shù)為學(xué)生的姓名lili返回的是學(xué)生的性別male。在調(diào)用存儲(chǔ)過程時(shí)將初始值為lili的用戶變量@info傳入存儲(chǔ)過程,調(diào)用存儲(chǔ)過程結(jié)束后再次查詢@info的值為male。
圖示如下:
在編寫存儲(chǔ)過程中有時(shí)需要使用變量保存數(shù)據(jù)處理過程中的值。這些變量的作用范圍為BEGIN…END,語法如下:
DECLARE varName dataType [DEFAULT value];
在該語法中:關(guān)鍵字DECLARE
用于定義變量,varNarne為局部變量的名稱,dataType為局部變量的類型,可選項(xiàng)DEFAULT value為變量默認(rèn)值。
在定義變量之后,可使用SET
為變量賦值或者修改變量的默認(rèn)值,語法如下:
SET varName = value;
變量使用示例1
代碼如下:
mysql> DELIMITER //mysql> CREATE PROCEDURE varTest(IN number1 INT) -> BEGIN -> -- 聲明變量number2 -> DECLARE number2 INT; -> -- 聲明變量result -> DECLARE result INT; -> -- 為變量number2賦值 -> SET number2=99; -> -- 為變量result賦值 -> SET result=number1+number2; -> -- 顯示result -> SELECT result; -> END //Query OK, 0 rows affected (0.01 sec)mysql> DELIMITER ;mysql>mysql> -- 調(diào)用存儲(chǔ)過程mysql> CALL varTest(1);
圖示如下:
變量使用示例2
代碼如下:
DROP PROCEDURE IF EXISTS findStudent;DELIMITER //CREATE PROCEDURE findStudent(IN studentID CHAR(6))BEGINDECLARE studentName VARCHAR(50);DECLARE studentGender VARCHAR(50);-- 將查詢結(jié)果保存至變量studentName和studentGender中SELECT sname,gender INTO studentName,studentGender FROM student WHERE sid=studentID;-- 顯示studentName和studentGender中保存的值SELECT studentName,studentGender;END //DELIMITER ;call findStudent('S_1001');
圖示如下:
通過之前的學(xué)習(xí),我已經(jīng)對(duì)存儲(chǔ)過程有了基本的了解。接下來,我們來學(xué)習(xí)在編寫存儲(chǔ)過程中非常重要的流程控制。流程控制語句用于將多個(gè)SQL語句劃分或組合成符合業(yè)務(wù)邏輯的代碼塊。MySQL中的流程控制語句包括:IF語句、CASE語句、 LOOP 語句、WHILE 語句、LEAVE 語句、ITERATE 語句、REPEAT 語句、WHILE語句。
IF
IF語句包含多個(gè)條件判斷,根據(jù)結(jié)果為TRUE、FALSE執(zhí)行語句;它與我們?cè)诰幊陶Z言中學(xué)的if、else if、else非常類似;語法格式如下:
IF expr_condition THEN statement_list [ELSE expr_condtion THEN statement_list] ... [ELSE statement_list]END IF
示例如下:
mysql> DROP PROCEDURE IF EXISTS testIF;Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER //mysql> CREATE PROCEDURE testIF(IN num INT) -> BEGIN -> DECLARE result VARCHAR(20); -> IF num < -1 THEN -> SET result = 'negative number'; -> ELSEIF num = 0 THEN -> SET result = 'number is zero'; -> ELSE -> SET result = 'positive number'; -> END IF; -> SELECT result; -> END //Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;mysql> call testIF(-9527);
圖示如下:
CASE是另一個(gè)條件判斷的語句,該語句有兩種語法格式。
第一種語法格式如下:
CASE case_expr WHEN value THEN statement_list [WHEN value THEN statement_list] ... [ELSE statement_list]END CASE;
示例如下:
mysql> DELIMITER //mysql> CREATE PROCEDURE testCASE1(IN num INT) -> BEGIN -> DECLARE result VARCHAR(20); -> CASE num -> WHEN 1 THEN SET result = 'num is 1'; -> WHEN 2 THEN SET result = 'num is 2'; -> ELSE SET result = 'num not 1 or 2'; -> END CASE; -> -> SELECT result; -> END //Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;mysql> call testCASE1(1);
圖示如下:
CASE WHEN expr_condition THEN statement_list [WHEN expr_condition THEN statement_list] ... [ELSE statement_list]END CASE;
示例如下:
mysql> DROP PROCEDURE IF EXISTS testCASE2;Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER //mysql> CREATE PROCEDURE testCASE2(IN num INT) -> BEGIN -> DECLARE result VARCHAR(20); -> CASE -> WHEN num < 0 THEN SET result = 'negative number'; -> WHEN num = 0 THEN SET result = 'number is zero'; -> ELSE SET result = 'positive number'; -> END CASE; -> -> SELECT result; -> END //Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;mysql> call testCASE2(1);
圖示如下:
LOOP
LOOP是一種循環(huán)語句,用來重復(fù)執(zhí)行某些語句。在執(zhí)行過程中可使用LEAVE語句跳出循環(huán),也可以嵌套IF等判斷語句。語法格式如下:
[loop_label:] LOOP statement_listEND LOOP [loop_label]
在該語法中,loop_label表示LOOP語句的標(biāo)注名稱,該參數(shù)可省略。
示例如下:
mysql> DROP PROCEDURE IF EXISTS testLOOP;Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER //mysql> -- 利用存儲(chǔ)過程求某區(qū)間的總和mysql> CREATE PROCEDURE testLOOP(IN start INT,IN end INT) -> BEGIN -> DECLARE sumResult INT DEFAULT 0; -> add_loop: LOOP -> SET sumResult=sumResult+start; -> SET start=start+1; -> IF start > end THEN -> LEAVE add_loop; -> END IF; -> END LOOP add_loop; -> -> SELECT sumResult; -> END //Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;mysql> call testLOOP(0,100);
圖示如下:
ITERATE
ITERATE表示再次循環(huán),該語句作用是將執(zhí)行順序轉(zhuǎn)到語句段開頭處再執(zhí)行,它與編程語言的continue非常類似;請(qǐng)注意:該語句只可出現(xiàn)在LOOP、REPEAT、WHILE語句內(nèi);語法格式如下:
ITERATE label
示例如下:
mysql> DROP PROCEDURE IF EXISTS testITERATE;Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER //mysql> -- 利用存儲(chǔ)過程求某區(qū)間的總和mysql> CREATE PROCEDURE testITERATE(IN start INT,IN end INT) -> BEGIN -> DECLARE sumResult INT DEFAULT 0; -> add_loop: LOOP -> SET sumResult=sumResult+start; -> SET start=start+1; -> IF start <= end THEN -> ITERATE add_loop; -> ELSE LEAVE add_loop; -> END IF; -> END LOOP add_loop; -> -> SELECT sumResult; -> END //Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;mysql> call testITERATE(0,100);
結(jié)果如下:
REPEAT語句
REPEAT表示帶判斷條件的循環(huán)過程。每次語句執(zhí)行完畢之后,會(huì)對(duì)條件表達(dá)式進(jìn)行判斷,若表達(dá)式為TRUE則循環(huán)結(jié)束,否則重復(fù)執(zhí)行。REPEAT非常類似于do…while,語法格式如下:
[repeat_label:] REPEAT statement_listUNTIL expr_condtionEND REPEAT [repeat_label]
在該語法中,repeat_label表示REPEAT的標(biāo)注名稱,該參數(shù)可省略。
示例如下:
mysql> DROP PROCEDURE IF EXISTS testREPEAT;Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER //mysql> -- 利用存儲(chǔ)過程求某區(qū)間的總和mysql> CREATE PROCEDURE testREPEAT(IN start INT,IN end INT) -> BEGIN -> DECLARE sumResult INT DEFAULT 0; -> REPEAT -> SET sumResult = sumResult + start; -> SET start=start+1; -> UNTIL start > end -> END REPEAT; -> -> SELECT sumResult; -> END //Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;mysql> call testREPEAT(0,100);
圖示如下:
WHILE用于帶判斷條件的循環(huán)過程。它與REPEAT不同,WHILE語句先判斷表達(dá)式,為真則執(zhí)行循環(huán)內(nèi)的語句,否則退出循環(huán)。WHILE與編程語言的while非常類似;語法格式如下:
[while_label:] WHILE expr_condition DO statement_listEND WHILE [while_label]
在該語法中,while_label表示W(wǎng)HILE的標(biāo)注名稱,該參數(shù)可以省略。
示例如下:
mysql> DROP PROCEDURE IF EXISTS testWHILE;Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER //mysql> -- 利用存儲(chǔ)過程求某區(qū)間的總和mysql> CREATE PROCEDURE testWHILE(IN start INT,IN end INT) -> BEGIN -> DECLARE sumResult INT DEFAULT 0; -> WHILE start <= end DO -> SET sumResult = sumResult + start; -> SET start=start+1; -> END WHILE; -> -> SELECT sumResult; -> END //Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;mysql> call testWHILE(0,100);
圖示如下:
在數(shù)據(jù)庫中游標(biāo)(cursor)是一個(gè)十分重要的概念。游標(biāo)提供了一種對(duì)從表中檢索出的數(shù)據(jù)進(jìn)行操作的靈活手段。就本質(zhì)而言,游標(biāo)實(shí)際上是一種能從包括多條數(shù)據(jù)記錄的結(jié)果集中每次提取一條記錄的機(jī)制。例如,在編寫存儲(chǔ)過程時(shí),查詢語句可能會(huì)返回多條記錄或大量記錄,此時(shí)則需要使用游標(biāo)來逐條讀取查詢結(jié)果集中的記錄。
游標(biāo)使用步驟為:定義游標(biāo)、打開游標(biāo)、使用游標(biāo)、關(guān)閉游標(biāo)、釋放游標(biāo);在此,我們對(duì)一一進(jìn)行介紹。
定義游標(biāo)
語法如下:
DECLARE 游標(biāo)名 CURSOR FOR select_statement;
打開游標(biāo)
語法如下:
OPEN 游標(biāo)名;
使用游標(biāo)
語法如下:
DECLARE 變量1 與對(duì)應(yīng)列值相同的數(shù)據(jù)類型DECLARE 變量2 與對(duì)應(yīng)列值相同的數(shù)據(jù)類型DECLARE 變量3 與對(duì)應(yīng)列值相同的數(shù)據(jù)類型FETCH NEXT FROM 游標(biāo) [ INTO 變量名1,變量名2,變量名3,…] ]
在該語法中,利用DECLARE聲明變量用于存儲(chǔ)查詢出來的數(shù)據(jù);利用FETCH 獲取數(shù)據(jù)并保存至DECLARE聲明的變量中;其中,F(xiàn)ETCH NEXT表示獲取下一行數(shù)據(jù)
在使用游標(biāo)時(shí)請(qǐng)注意:在初始狀態(tài)中,游標(biāo)默認(rèn)指向數(shù)據(jù)集的第一行數(shù)據(jù)之前。所以,在使用游標(biāo)時(shí)應(yīng)該先執(zhí)行FETCH NEXT操作讓其指向第一行數(shù)據(jù)。
關(guān)閉游標(biāo)
語法如下:
CLOSE 游標(biāo)名;
釋放游標(biāo)
語法如下:
DEALLOCATE 游標(biāo)名;
在正式進(jìn)入到游標(biāo)的學(xué)習(xí)之前,我們先準(zhǔn)備測(cè)試數(shù)據(jù),代碼如下:
DROP TABLE IF EXISTS student;CREATE TABLE student ( sid CHAR(6), sname VARCHAR(50), age INT, gender VARCHAR(50) DEFAULT 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');
游標(biāo)使用示例1
代碼如下:
mysql> DROP PROCEDURE IF EXISTS cursorTest1;Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER //mysql> CREATE PROCEDURE cursorTest1() -> BEGIN -> -- 聲明與對(duì)應(yīng)列類型相同的4個(gè)變量 -> DECLARE studentID CHAR(6); -> DECLARE studentName VARCHAR(50); -> DECLARE studentAge INT; -> DECLARE studentGender VARCHAR(50); -> -> -- 定義游標(biāo)studentCursor -> DECLARE studentCursor cursor for SELECT * FROM student; -> -- 打開游標(biāo) -> OPEN studentCursor; -> -- 使用游標(biāo)獲取列的值 -> FETCH next FROM studentCursor INTO studentID,studentName,studentAge,studentGender; -> -- 顯示結(jié)果 -> SELECT studentID,studentName,studentAge,studentGender; -> -- 關(guān)閉游標(biāo) -> CLOSE studentCursor; -> END //Query OK, 0 rows affected (0.01 sec)mysql> DELIMITER ;mysql> -- 調(diào)用存儲(chǔ)過程mysql> CALL cursorTest1();
在該存儲(chǔ)過程中,查詢后得到的結(jié)果集為表中所有數(shù)據(jù)。在此,利用FETCH next
將結(jié)果集中的第一條數(shù)據(jù)的sid,sname,age,gender對(duì)應(yīng)地保存至studentID,studentName,studentAge,studentGender變量中。
圖示如下:
游標(biāo)使用示例2
代碼如下:
mysql> DROP PROCEDURE IF EXISTS cursorTest2;Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER //mysql> CREATE PROCEDURE cursorTest2() -> BEGIN -> -- 聲明與對(duì)應(yīng)列類型相同的4個(gè)變量 -> DECLARE studentID CHAR(6); -> DECLARE studentName VARCHAR(50); -> DECLARE studentAge INT; -> DECLARE studentGender VARCHAR(50); -> -> -- 聲明計(jì)數(shù)器 -> DECLARE count INT DEFAULT 0; -> -> DECLARE total INT DEFAULT 0; -> -> -- 定義游標(biāo)studentCursor -> DECLARE studentCursor cursor for SELECT * FROM student; -> -> set total = (SELECT count(*) FROM student); -> -> -- 打開游標(biāo) -> OPEN studentCursor; -> -- 利用REPEAT語句循環(huán)取出結(jié)果集中的數(shù)據(jù) -> REPEAT -> FETCH next FROM studentCursor INTO studentID,studentName,studentAge,studentGender; -> SELECT studentID,studentName,studentAge,studentGender; -> SET count=count+1; -> UNTIL count=total -> END REPEAT; -> -> -- 關(guān)閉游標(biāo) -> CLOSE studentCursor; -> END //Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;mysql> -- 調(diào)用存儲(chǔ)過程mysql> CALL cursorTest2();
在該示例中利用REPEAT語句循環(huán)取出結(jié)果集中的每條數(shù)據(jù)并進(jìn)行展示。在循環(huán)過程中FETCH next不斷地指向結(jié)果集的下一條數(shù)據(jù)。
結(jié)果如下:
聯(lián)系客服