select empno,ename,job,sal from emp
/*******
for 游標
*******/
declare
--定義游標
cursor c_man is
select * from emp where job = 'manager';
--定義游標的行(在for語句中,這個可以不用定義)
-- c_row c_man%rowtype;
begin
--迴圈游標查詢 行.欄位 (訪問)
for c_row in c_man loop
dbms_output.put_line(c_row.empno);
--exit when c_man % notfound = false;
end loop;
end;
/*******
for 游標 更新當前行
where ... update of 字段
update ...where ..for current 游標名
*******/
declare
cursor c_table is select * from emp where upper(job)='manager' for update of sal;
begin
for c_row in c_table loop
if c_row.empno=7566 then
update emp set sal=sal-0.1 where current of c_table;
end if;
end loop;
commit;
end;
/*******
for 游標 簡潔
*******/
begin
for c_table in(select * from emp) loop
if c_table.empno=7566 then
dbms_output.put_line(c_table.sal);
end if;
end loop;
end;
/*******
fetch 游標 讀取行
*******/
declare
cursor c_table is
select * from emp where upper(job)='manager';
c_row c_table%rowtype;
begin
--開啟游標
open c_table;
--迴圈體
loop
--讀取一行
fetch c_table into c_row;
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
--退出條件
exit when c_table%notfound;
end loop;
--關閉游標
close c_table;
end;
/*******
fetch 游標 讀取列
*******/
declare
v_job emp.job%type;
v_sal emp.sal%type;
cursor c_table is select job,sal from emp where empno in(7369,7499) ;
begin
open c_table;
loop
fetch c_table into v_job,v_sal;
exit when c_table%notfound;
dbms_output.put_line(v_job||to_char(v_sal));
end loop;
close c_table;
--commit;
end;
動態游標的寫法
在變數宣告部分定義的游標是靜態的,不能在程式執行過程中修改。雖然可以通過引數傳遞來取得不同的資料,但還是有很大的侷限性。通過採用動態游標,可以在程式執行階段隨時生成乙個查詢語句作為游標。要使用動態游標需要先定義乙個游標型別,然後宣告乙個游標變數,游標對應的查詢語句可以在程式的執行過程中動態地說明。定...
sql語句游標的寫法
當迴圈查詢一張表的資訊時,我們得寫一張游標來對每條資訊進行操作,具體格式如下 declare fitemid int declare point cursor cursor forselect fitemid from icstockbillentry where finterid 1314 每條資...
Cursor游標(游標)的使用
為了處理sql語句,oracle 將在記憶體中分配乙個區域,這就是上下文區。這個區包含了已經處理完的行數 指向被分析語句的指標,整個區是查詢語句返回的資料行集。游標就是指向上下文區控制代碼或指標。兩種游標 一 顯示游標 需要明確定義!顯示游標被用於處理返回多行資料的select 語句,游標名通過cu...