1. 程式人生 > 實用技巧 >MySQL基礎之使用遊標

MySQL基礎之使用遊標

遊標

使用簡單的SELECT語句, 沒有辦法得到第一行、下一行、或前10行, 也不存在每次一行地處理所有行的簡單方法

有時候, 需要在檢索出來的行中前進或後退一行或多行。這就是使用遊標的原因。遊標是一個儲存在MySQL伺服器上的資料庫查詢, 它不是一條SELECT語句, 而是被該語句檢索出來的結果集。在儲存了遊標之後, 應用程式可以根據需要滾動或瀏覽其中的內容

遊標主要使用者互動式應用, 其中使用者需要滾動螢幕上的資料, 並對資料進行瀏覽或作出更改

MySQL的遊標只能使用者儲存過程(和函式)

使用遊標

使用遊標有幾個明確的步驟

  • 在能夠使用遊標之前, 必須宣告它。這個過程實際上沒有檢索資料, 它只是定義要使用的SELECT語句
  • 一旦聲明後, 必須開啟遊標以供使用
  • 對於填有資料的遊標, 根據需要取出(檢索)各行
  • 在結束遊標使用時, 必須關閉遊標

建立遊標

遊標用DECLARE語句建立。DECLARE命名遊標, 並定義相應的SELECT語句, 根據需要帶WHERE和其他子句。

MariaDB [crashcourse]> DELIMITER $
MariaDB [crashcourse]> CREATE PROCEDURE productorders()
    -> BEGIN
    -> DECLARE ordernumbers CURSOR FOR SELECT order_num FROM
orders; -> END $

儲存過程處理完後, 遊標就消失, 因為它侷限於儲存過程。

開啟和關閉遊標

遊標用OPEN CURSOR語句來開啟

MariaDB [crashcourse]>  OPEN ordernumbers;

在處理OPEN語句時執行查詢, 儲存檢索出的資料以供瀏覽和滾動。

遊標處理完後, 應當使用如下語句關閉遊標

MariaDB [crashcourse]>  CLOSE ordernumbers;

CLOSE釋放遊標使用的所有內部記憶體和資源, 因此在每個遊標不再需要時應該關閉。

在一個遊標關閉後, 如果沒有重新開啟, 則不能使用它了。但是, 使用宣告過的遊標不需要再次宣告, 用OPEN開啟它就可以了

MariaDB [crashcourse]> DELIMITER $
MariaDB [crashcourse]> CREATE PROCEDURE productorders()
    -> BEGIN
    ->  -- Declare the cursor
    ->  DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders;
    ->  
    ->  -- Open the cursor
    ->  OPEN ordernumbers;
    ->
    ->  --Close the cursor
    ->  CLOSE ordernumbers;    
    -> END $

使用遊標資料

在一個遊標被開啟後, 可以使用FETCH語句分別訪問它的每一行。FETCH指定檢索什麼資料(所需的列), 檢索出來的資料儲存在什麼地方。它還向前移動遊標中的內部行指標, 使下一條FETCH語句檢索下一行

MariaDB [crashcourse]> DELIMITER $
MariaDB [crashcourse]> CREATE PROCEDURE productorders()
    -> BEGIN
    -> 
    ->  --Declare local variables
    ->  DECLARE o INT;
    ->  
    ->  -- Declare the cursor
    ->  DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders;
    ->  
    ->  -- Open the cursor
    ->  OPEN ordernumbers;
    ->
    ->  -- Get order number
    ->  FETCH ordernumbers INTO o
    ->
    ->  --Close the cursor
    ->  CLOSE ordernumbers;    
    -> 
    -> END $

FETCH用來檢索當前行的order_num列(將自動從第一行開始)到一個名為o的區域性宣告的變數中。對檢索出來的資料不做任何出來