1. 程式人生 > 實用技巧 >維吉尼亞加密與解密

維吉尼亞加密與解密

第21課 使用遊標

21.1 遊標

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

21.2 使用遊標

使用遊標涉及幾個明確的步驟:

  • 在使用遊標前,必須宣告(定義)它。這個過程實際上沒有檢索資料,它只是定義要使用的SELECT語句和遊標選項。
  • 一旦宣告,就必須開啟遊標以供使用。這個過程用前面定義的SELECT語句把資料實際檢索出來。
  • 對於填有資料的遊標,根據需要取出(檢索)各行。
  • 在結束遊標使用時,必須關閉遊標,可能的話,釋放遊標(有賴於具體的DBMS)。

21.2.1 建立遊標

使用DECLARE語句建立遊標,這條語句在不同的DBMS中有所不同。DECLARE命名遊標,並定義相應的SELECT語句,根據需要帶WHERE和其他子句。

下面是建立此遊標的DB2、MariaDB、MySQL和SQL Server版本:

DECLARE CustCursor CURSOR
FOR
SELECT * FROM Customers
WHERE cust_email IS NULL

下面是Oracle和PostgreSQL版本:

DECLARE CURSOR CustCursor
IS
SELECT * FROM Customers
WHERE cust_email IS NULL

在上面兩個版本中,DECLARE語句用來定義和命名遊標,這裡為CustCursor。SELECT語句定義一個包含沒有電子郵件地址(NULL值)的所有顧客的遊標。

21.2.2 使用遊標

使用OPEN CURSOR語句開啟遊標,這條語句很簡單,在大多數DBMS中的語法相同:

OPEN CURSOR CustCursor

現在可以用FETCH語句訪問遊標資料了。FETCH指出要檢索哪些行,從何處檢索它們以及將它們放於何處(如變數名)。第一個例子使用Oracle語法從遊標中檢索一行(第一行):

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中。對於檢索出來的資料不做任何處理。

下一個例子(也使用Oracle語法)中,從第一行到最後一行,對檢索出來的資料進行迴圈:

DECLARE TYPE CustCursor IS REF CURSOR
    RETURN Customers%ROWTYPE;
DECLARE CustRecord Customers%ROWTYPE
BEGIN
    OPEN CustCursor;
    LOOP
    FETCH CustCursor INTO CustRecord;
    EXIT WHEN CustCursor%NOTFOUND;
    ...
    END LOOP;
    CLOSE CustCursor;
END;

21.2.3 關閉遊標

下面是DB2、Oracle和PostgreSQL的語法:

CLOSE CustCursor

CLOSE語句用來關閉遊標。一旦遊標關閉,如果不再次開啟,將不能使用。第二次使用它時不需要再宣告,只需用OPEN開啟它即可。

21.3 小結

我們在本課講授了什麼是遊標,為什麼使用遊標。