Navicat 部落格

使用資料指標反覆運算查詢結果集 2021 年 5 月 4 日,由 Robert Gravelle 撰寫

作為一種交易性程式設計語言,SQL 被設計成全部執行或全部不執行其工作。同時,程序性程式設計語言(如 C# 和 Java)在本質上通常是反覆運算的。因此,它們傾向於在相同的程式碼上迴圈,直到堆棧减少並得到完全處理。資料指標(Cursor)是 SQL 交易方法的一個顯著例外。與 WHILE 迴圈一樣,資料指標允許程式設計師通過對 SELECT 結果集的每一列進行反覆運算來分別處理它們。雖然許多 SQL 純粹主義者出於蔑視或恐懼而避開反覆運算,但它們在資料庫開發中有自己的位置,非常值得我們學習。為此,今天的文章將介紹何時以及如何在預存程序中使用資料指標。

資料指標的定義

如上所述,資料庫資料指標是一種特殊的控制結構,它可以遍訪資料庫中的記錄,以便順序處理查詢結果集的各列。在預存程序中,資料指標使逐列執行複雜邏輯成為可能。

資料指標具有三個重要屬性:

  • 敏感性調適:伺服器可以複製或不複製其結果資料表。
  • 唯讀:資料不可更新。
  • 不可捲動:只能沿一個方向前進,不能跳過任何一列資料。

如何使用指標

在預存程序中使用資料指標有四個步驟:/p>

  • 宣告資料指標。
  • 開啟資料指標。
  • 擷取資料並放在變數中。
  • 完成後關閉資料指標。

宣告資料指標

下面的陳述式宣告一個資料指標,並將它與 SELECT 陳述式產生關聯。該 SELECT 陳述式擷取資料指標要遍訪的列:

DECLARE cursor_name 
CURSOR FOR select_statement

開啟資料指標

下面的陳述式開啟之前宣告的資料指標。

OPEN cursor_name

擷取資料並放在變數中

此陳述式擷取與指定資料指標(必須開啟)關聯的 SELECT 陳述式的下一列,並前進游標的指標。如果存在列,則將擷取的欄儲存在命名變數中。SELECT 陳述式擷取的欄數量必須與 FETCH 陳述式中指定的輸出變數數量對應。

FETCH [[NEXT] FROM] cursor_name 
INTO var_name [, var_name] ...

完成後關閉資料指標

此陳述式關閉資料指標。如果資料指標未開啟,則會發生錯誤。

CLOSE cursor_name

實際範例

以下是預存程序的定義(在 Navicat for MySQL 中顯示),它使用一個資料指標為 Sakila 範例資料庫中的所有工作人員產生電子郵件清單:

cursor_definition (81K)

getEmail LOOP 中,資料指標在電子郵件清單上反覆運算,並連接所有用分號(;)分隔的電子郵件。finished變數通知資料指標在沒有擷取到電子郵件時結束迴圈。以下是執行預存程序後 emailList的值:

cursor_result (22K)

總結

在今天的文章中,我們學習了何時以及如何在預存程序中使用資料指標。

如果你對 Navicat for MySQL 感興趣,可以免費試用 14 天!

Navicat 文章
頻道記錄
分享
部落格封存檔