1遊標
有時,需要在檢索出來的行中前進或後退一行或多行。這就是使用遊標的原因。
遊標(cursor)是一個存儲在MySQL服務器上的數據庫查詢,它不是一條SELECT語句,而是被該語句檢索出來的結果集。在存儲了遊標之後,應用程序可以根據需要滾動混着瀏覽其中的數據。
遊標主要用於交互式應用,其中用戶需要滾動屏幕上的數據,並對數據進行瀏覽或做出更改。
2使用遊標
使用遊標涉及幾個明確的步驟
- 在能夠使用遊標前,必須聲明(定義)它。這個過程實際上沒有檢索數據,它只是定義要使用的SELECT語句。
- 一旦聲明後,必須打開遊標以供使用。這個過程用前面定義的SELECT語句把數據實際檢索出來。
- 對於填有數據的遊標,根據需要取出(檢索)各行。
- 在結束遊標使用時,必須關閉遊標。
在聲明遊標後,可根據需要頻繁地打開和關閉遊標。在遊標打開後,可根據需要頻繁地執行取操作。
2.1創建遊標
遊標用DECLARE語句創建,DECLARE命名遊標,並定義相應的SELECT語句,根據需要帶WHERE和其他子句。
實例說話
DECLARE CustCursor CURSOR
FOR
SELECT * FROM Customers
WHERE cust_email IS NULL;
分析:DELCARE語句用來定義和命名遊標,這裏爲CustCursor。SELECT語句定義一個包含沒有電子郵件地址(NULL值)的所有顧客的遊標。定義遊標後就可以打開它了。
2.2使用遊標
使用OPEN CURSOR語句打開遊標。
OPEN CURSOR CustCursor
在處理OPEN CURSOR語句時,執行查詢,存儲檢索出的數據以供瀏覽和滾動。
使用FETCH語句訪問遊標。
DECLARE TYPE CustCursor IS REF CURSOR
RETURN Customers%ROWTYPE;
DECLARE CustRecord Customers%ROWTYPE
BEGIN
OPEN CustCursor;
FETCH CustCursor INTO CustRecord;
CLOSE CustCursor;
END;
分析:FETCH用來檢索當前行(自動從第一行開始),放到生命的變量CustRecord中。對於檢索出來的數據不做任何處理。
2.3關閉遊標
關閉遊標使用CLOSE CustCursor,CLOSE釋放遊標使用的所有內部內存和資源,因此在每個遊標不再需要時都應該關閉。