oracle學習 九 游標的使用(持續更)

2022-02-12 04:07:37 字數 3016 閱讀 7059

為什麼要使用?

筆者查閱了一些資料之後得到的結論是,

關係型資料庫是面向集合的,而游標是面向行的,游標可對取出來的集合(結果集)中每一行進行相同或不同的操作,還提供對基於游標位置而對錶中資料進行刪除或更新的能力,某些特     殊的查詢操作也可以通過游標去完成,讓你在查詢暫時沒辦法的時候多了一種選擇。

游標的型別?

游標分為:

1、fetch 定義的游標名 into 游標變數

2、for 游標變數 in 游標名 loop

兩種方式,其中for方式是隱式游標,可以對資料庫後台進行開啟關閉的操作,fetch是顯示游標,需要操作者自行開啟關閉,關於二者優劣網上說法不一,但是個人來看,還是for的方   式比較簡便。

游標語法:

有以下例子:

for:

declare

--定義游標

cursor

c_job

is--

查詢的語句

select

user_id,user_name

from

t_user_info;

--定義游標變數

c_row c_job%

rowtype;

begin

--使用游標變數在游標中進行檢索

for c_row in

c_job loop

dbms_output.put_line(c_row.

user_id||'

-'||c_row.user_name

);

--迴圈條件結束

endloop;

end;

fetch:

declare

--定義游標.

cursor c_test_main is

select

user_id, user_name

from

t_user_info;

--儲存游標資料的變數

v_main_data c_test_main%

rowtype;

begin

--開啟游標.

open

c_test_main;

loop

--填充資料(主表).

fetch c_test_main into

v_main_data;

--假如沒有檢索到(主表)資料,結束迴圈處理

exit

when c_test_main%

notfound;

dbms_output.put_line(v_main_data.

user_id||'

-'||v_main_data.user_name

);

endloop;

--關閉游標

close

c_test_main;

end;

備註?1、 

dbms_output.put_line('

輸出內容

');

2、

游標變數名  表名%

rowtype

游標變數名 游標名

%rowtype

個人測試了以下,宣告游標變數的兩種方法中   

游標變數名  游標名%rowtype

這種方式執行的速度更快一點,它是再說這個變數是一行資料的例項,
類似於游標裡的一行資料。而
游標變數名  表名%

rowtype

這個方法是說這個變數是表中的乙個例項,類似於表裡的一行資料。

一種簡單的操作方法也可以是這樣的:

declare

n_count number;

begin

for cur_record in

( --游標要查詢的集合

select t.category_id from

am_category t)

loop

--游標執行的內容

execute immediate

'update am_

'||cur_record.category_id||'

_entry set storage_id=null where storage_id is not null';

dbms_output.put_line(

'update am_

'||cur_record.category_id||'

_entry set storage_id=null where storage_id is not null');

end loop;

--commit;

end;

其中excute immediate是為了解決動態拼接表名進行游標式表資料更新的一種方式 ,execute immediate將不會提交乙個dml事務執行,應該顯式提交 ,剛動態拼接的表不會馬上存在,1. execute immediate會讓這個表理科變成真實的表,這樣就可以及時使用了
cur_record.category_id:游標名.查詢的欄位名稱

不是動態的表一般不用到

excute immediate

如:

declare

cur_entryid

number

;begin

for cur_entryid in

(

--游標要查詢的集合

select entry_id from

am_aj_entry )

loop

--游標執行的內容

delete

from am_aj_datum t where t.entry_id =

cur_entryid.entry_id;

endloop;

--commit;

end;

oracle游標的使用

當select語句從資料庫中返回的記錄多餘一條時,就可以使用游標 cursor 游標可以理解為一次訪問乙個的一組記錄。select語句將列提取到游標中,然後根據游標取得記錄。使用游標時需要遵從以下的5個步驟 1 宣告一些變數,用於儲存select語句返回列值 2 宣告游標,並制定select語句 3...

oracle游標的使用

游標 cursor 也稱之為游標,從字面意思理解就是游動的游標。游標是對映在結果集中一行資料上的位置實體。游標是從表中檢索出 結果集,並從中每次指向一條記錄進行互動的機制。cursor 游標名 引數名 資料型別 引數名 資料型別 is select 語句 示例 無參游標 cursor c emp i...

ORACLE游標的使用

1 游標的說明 游標是一種向包含多條資料記錄的結果集中每次讀取一行的機制,逐行處理查詢結果,以程式設計的方式訪問資料庫。可以把游標當成指標,可以指定結果集中的任何位置,然後允許使用者對指定位置的資料進行操作。sql的游標是一種臨時資料庫物件,可以臨時存放資料表中的資料行副本,也可以指向儲存在資料表中...