為什麼要使用?
筆者查閱了一些資料之後得到的結論是,
關係型資料庫是面向集合的,而游標是面向行的,游標可對取出來的集合(結果集)中每一行進行相同或不同的操作,還提供對基於游標位置而對錶中資料進行刪除或更新的能力,某些特 殊的查詢操作也可以通過游標去完成,讓你在查詢暫時沒辦法的時候多了一種選擇。游標的型別?
游標分為:
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
這個方法是說這個變數是表中的乙個例項,類似於表裡的一行資料。
一種簡單的操作方法也可以是這樣的:
declaren_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如:
declarecur_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的游標是一種臨時資料庫物件,可以臨時存放資料表中的資料行副本,也可以指向儲存在資料表中...