游標

游標

游標是現代詞,是一個專有名詞,指的是電腦術語。大部分的游標都為一個小豎線,規則的閃動.而在DOS下有些游標則是短短的小橫線,同樣規則的閃動.

  • 中文名稱
    游標
  • 外文名稱
    The cursor
  • 電腦術語
    輸入文字的位置
  • DOS
    閃動

英語釋義

cursor

簡介

一、電腦術語

當你在一個文本框或某種程式中輸入文字時,總有一個游標來顯示你將要輸入文字的位置。

現在大部分的游標都為一個小豎線,規則的閃動.而在DOS下有些游標則是短短的小橫線,同樣規則的閃動.現用的windows游標是一個圖像,可以是動態的也可以是靜態的,在不同情況下樣子也不同。

二、資料庫中的游標

什麽是游標

(要管理 SQL 語句的處理,必須隱式的給它定義一個游標。)使用者聲明並使用顯示游標處理 SELECT 語句返回的多條記錄。顯示的定義游標是一種結構,它使使用者能夠為特定的語句指定記憶體區域,以便以後使用。

游標的作用

當 PL/SQL 游標查詢返回多行資料時,這些記錄組被稱為活動集。 Oracle 將這種活動集存儲在您建立的顯示定義的已命名的游標中。Oracle 游標是一種用于輕松的處理多行資料的機製,沒有游標, Oracle 開發人員必須單獨地、顯示地取回並管理游標查詢選擇的每一條記錄。

游標的另一項功能事,它包含一個跟蹤當前訪問的記錄的指針,這使您的程式能夠一次處理多條記錄。

使用顯示游標的基本方法

步驟如下:

1 、聲明游標

聲明游標的文法如下:

DECLARE cursor_name

Is

SELECT statement

其中, cursor_name 是您給游標指定的名稱; SELECT statement 是給游標活動集返回記錄的查詢。

聲明游標完成了下面兩個目的:

給游標命名;

將一個查詢與游標關聯起來。

值得註意的是,必須在 PL/SQL 塊的聲明部分聲明游標;給游標指定的名稱是一個未聲明的標識符,而不是一個 PL/SQL 變數,不能給游標名稱賦值,也不能將它用在表達式中。 PL/SQL 塊使用這個名稱來引用游標查詢。

例: DECLARE

CURSOR c1

Is

SELECT VIEW_NAME FROM ALL_VIEWS

WHERE ROWNUM<=10 ;

另外還可以在游標定義語句中聲明游標的參數,例:

CURSOR c1 ( view _nbr number )

Is

SELECT VIEW_NAME FROM ALL_VIEWS

WHERE ROWNUM<= view _nbr ;

游標參數隻對相應的游標是可見的,不能在游標範圍之外引用該游標的參數。如果嘗試這樣做, Oracle 將返回一個錯誤,指出該變數沒有定義。

2 、開啟游標

開啟游標的文法如下:

OPEN cursor_name ;

其中 cursor_name 是您以前定義的游標名稱。

開啟游標將激活查詢並識別活動集,可是在執行游標取回命令之前,並沒有真正取回記錄。 OPEN 命令還初始化了游標指針,使其指向活動集的第一條記錄。游標被開啟後,直到關閉之前,取回到活動集的所有資料都是靜態的,換句話說,游標忽略所有在游標開啟之後,對資料執行的 SQL DML 命令( INSERT 、 UPDATE 、 DELETE 和 SELECT )。因此隻有在需要時才開啟它,要重新整理活動集,隻需關閉並重新開啟游標即可。

3 、從游標中取回資料

FETCH 命令以每次一條記錄的方式取回活動集中的記錄。通常將 FETCH 命令和某種迭代處理結合起來使用,在迭代處理中, FETCH 命令每執行一次,游標前進到活動集的下一條記錄。

FETCH 命令的文法:

FETCH cursor_name INTO record_list ;

其中, cursor_name 是前面定義的游標的名稱; record_list 是變數列表,它接受活動集中的列。 FETCH 命令將活動集的結果放置到這些變數中。

執行 FETCH 命令後,活動集中的結果被取回到 PL/SQL 變數中,以便在 PL/SQL 塊中使用。每取回一條記錄,游標的指針就移向活動集的下一條記錄。

例:

FETCH C1 INTO VNAME;

WHILE C1%FOUND LOOP

DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||' '||VNAME);

END LOOP;

其中,使用屬性 '%FOUND' 使得當 FETCH 到達活動集的結尾時,不會引發異常。其它屬性及含義見下表:

屬性 含量

%FOUND 布爾型屬性,當最近一次該記錄時成功返回,則值為 TRUE

%NOTFOUND 布爾型屬性,它的值總與 %FOUND 屬性的值相反

%ISOPEN 布爾型屬性,當游標是開啟時返回 TRUE

%ROWCOUNT 數位型屬性,返回已從游標中讀取的記錄數

屬性 含量

%FOUND 布爾型屬性,當最近一次該記錄時成功返回,則值為 TRUE

%NOTFOUND 布爾型屬性,它的值總與 %FOUND 屬性的值相反

%ISOPEN 布爾型屬性,當游標是開啟時返回 TRUE

%ROWCOUNT 數位型屬性,返回已從游標中讀取的記錄數

4 、關閉游標

CLOSE 語句關閉以前開啟的游標,使得活動集不確定。當使用者的程式或會話結束時, Oracle 隱式關閉游標。游標被關閉後,就不能對它執行任何操作了 , 否則將引發異常。

CLOSE 語句的文法是:

CLOSE cursor_name ;

其中, cursor_name 是以前開啟的游標的名稱。

完整的程式代碼如下:

DECLARE

CURSOR C1 IS SELECT VIEW_NAME FROM ALL_VIEWS

WHERE ROWNUM<=10

ORDER BY VIEW_NAME;

VNAME VARCHAR2(40);

BEGIN

OPEN C1;

FETCH C1 INTO VNAME;

WHILE C1%FOUND LOOP

DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||''||VNAME);

END LOOP;

END;

…… CLOSE C1;

小結

游標是一種結構 , 能夠以一次一條記錄的方式處理多行查詢的結果 . 為每條 DML 語句建立隱式游標 , 而顯示游標是由使用者建立的 , 以便處理返回多條記錄的查詢。而且 , 通過消除反復地分析代碼 , 游標提高了代碼的處理速度。

相關詞條

相關搜尋

其它詞條