求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

光標檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋
光標
圖片來自優酷

計算機術語

光標(cursor)也被稱為游標。Oracle 使用兩種光標:顯示光標和隱式光標。不管語句返回多少條紀錄, PL/SQL 為使用的每一條 UPDATE 、 DELETE 和 INSERT 等 SQL 命令隱式的聲明一個光標。

當你在一個文本框或某種程序中輸入文字時,總有一個光標來顯示你將要輸入文字的位置。大部分的光標都為一個小豎線,規則的閃動。而在DOS下有些光標則是短短的小橫線,同樣規則的閃動。現用的windows光標是一個圖像,可以是動態的也可以是靜態的,在不同情況下樣子也不同。

  • 外文名:cursor
  • 分 類:顯示光標和隱式光標
  • 所屬類別:計算機
  • 用 途:輸入文字

計算機術語

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

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

數據庫中的光標

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

當 PL/SQL 光標查詢返回多行數據時,這些記錄組被稱為活動集。 Oracle 將這種活動集存儲在您創建的顯示定義的已命名的光標中。Oracle 光標是一種用於輕鬆的處理多行數據的機制,沒有光標, Oracle 開發人員必須單獨地、顯示地取回並管理光標查詢選擇的每一條記錄。光標的另一項功能事,它包含一個跟蹤當前訪問的記錄的指針,這使您的程序能夠一次處理多條記錄。 [2]

使用光標的基本方法

聲明光標

聲明光標的語法如下:

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 將返回一個錯誤,指出該變量沒有定義。

打開光標

打開光標的語法如下:

OPEN cursor_name ;

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

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

從光標中取回數據

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;

關閉光標

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; [3]

參考文獻