首頁 > 易卦

MySQL中的遊標

作者:由 酷扯兒 發表于 易卦日期:2023-01-10

儲存過程如何迴圈呼叫

「來源: |SQL資料庫開發 ID:sql_road」

設為“置頂或星標

”,第一時間送達乾貨

SQL專欄

SQL基礎知識第二版

SQL高階知識第二版

什麼是遊標?

遊標(cursor)是一個儲存在MySQL伺服器上的資料庫查詢,它不是一條SELECT語句,而是被該語句檢索出來的結果集。在儲存了遊標之後,應用程式可以根據需要滾動或瀏覽其中的資料。

注意:MySQL遊標只能用於儲存過程(和函式)。

建立遊標

在建立一個遊標前,我們需要先清除遊標的語法

1、定義遊標

DECLARE 遊標名稱 CURSOR FOR SQL語句;

2、開啟遊標

OPEN 遊標名稱;

3、獲取結果

FETCH 遊標名稱 INTO 變數名稱[,變數名稱];

4、關閉遊標

CLOSE 遊標名稱;

我們以Customers表來作為示例

MySQL中的遊標

示例一

定義一個儲存過程,呼叫的時候執行裡面的遊標

CREATEPROCEDURE PROC1()BEGIN—— 定義兩個存放結果的變數DECLARENAMEVARCHAR(20);DECLARE ADDR VARCHAR(50);—— 宣告遊標DECLARE MY CURSORFORSELECT 姓名,地址 FROM customers;—— 開啟遊標 OPEN MY;—— 獲取結果 FETCH MY INTO NAME,ADDR;—— 這裡是為了顯示獲取結果SELECTNAME,ADDR;—— 關閉遊標 CLOSE MY; END;

我們執行完上面的儲存過程後,就可以呼叫該儲存過程了

CALL PROC1();

得到結果:

MySQL中的遊標

這裡肯定有小夥伴好奇,customers表裡明明有7條記錄,為什麼只顯示了1條記錄?

這是因為遊標的變數只保留了customers表中的第一行資料,如果要檢視後面的資料,就需要迴圈往下移動遊標,才能繼續檢視。

示例二

定義一個儲存過程,呼叫儲存過程時,將表customers裡的資料迴圈寫入新的表裡面。

CREATEPROCEDURE PROC2()BEGIN—— 定義兩個存放結果的變數DECLARE FLAG INTDEFAULT0; DECLARENAMEVARCHAR(20);DECLARE ADDR VARCHAR(50);—— 宣告遊標DECLARE MY CURSORFORSELECT 姓名,地址 FROM customers;

DECLARE CONTINUE HANDLERFORNOTFOUNDSET FLAG=1;—— 開啟遊標 OPEN MY;—— 迴圈體部分 L1:LOOP—— 獲取結果 FETCH MY INTO NAME,ADDR; IF FLAG=1 THEN LEAVE L1;ENDIF;—— 這裡是為了顯示獲取結果INSERTINTO cus VALUES(NAME,ADDR);—— 關閉遊標ENDLOOP; —— 結束迴圈 CLOSE MY; END;

然後我們執行這個儲存過程,並查詢cus表裡的資料

CALL PROC2();SELECT * FROM cus;

結果:

MySQL中的遊標

結果與customers裡的一致,但是這些結果是迴圈一條一條往下移動的過程中插入的,即這個迴圈執行了7次。

以上就是遊標的基本操作原理了,此外遊標的迴圈體還有WHILE,REPEAT等操作方式,他們的操作方式與LOOP類似,都是用來迴圈執行迴圈體裡面的內容,直到迴圈結束。

以上就是MySQL遊標的相關內容,覺得不錯記得幫忙轉發+在看~

MySQL中的遊標

最後給大家分享我寫的SQL兩件套:

《SQL基礎知識第二版》

《SQL高階知識第二版》

的PDF電子版。裡面有各個語法的解釋、大量的例項講解和批註等等,非常通俗易懂,方便大家跟著一起來實操。