oracle中游標的使用

時間 2021-09-07 04:08:50

1樓:放飛新的人生

--<1>定義游標

--<2>定義游標變數

--<3>使用for迴圈來使用這個游標

--前向游標 只能往乙個方向走

--效率很高

declare

--型別定義

cursor cc is select empno,ename,job,sal

from emp where job = 'manager';

--定義乙個游標變數

ccrec cc%rowtype;

begin

--for迴圈

for ccrec in cc loop

dbms_output.put_line(ccrec.empno||'-'||ccrec.ename||'-'||ccrec.job||'-'||ccrec.sal);

end loop;

end;

(2) fetch游標

--使用的時候 必須要明確的開啟和關閉

declare

--型別定義

cursor cc is select empno,ename,job,sal

from emp where job = 'manager';

--定義乙個游標變數

ccrec cc%rowtype;

begin

--開啟游標

open cc;

--loop迴圈

loop

--提取一行資料到ccrec中

fetch cc into ccrec;

--判斷是否提取到值,沒取到值就退出

--取到值cc%notfound 是false

--取不到值cc%notfound 是true

exit when cc%notfound;

dbms_output.put_line(ccrec.empno||'-'||ccrec.ename||'-'||ccrec.job||'-'||ccrec.sal);

end loop;

--關閉游標

close cc;

end;

游標的屬性4種

%notfound fetch是否提到資料 沒有true 提到false

%found fetch是否提到資料 有true 沒提到false

%rowcount 已經取出的記錄的條數

%isopen 布林值 游標是否開啟

(3)引數游標

按部門編號的順序輸出部門經理的名字

declare

--部門

cursor c1 is select deptno from dept;

--引數游標c2,定義引數的時候

--只能指定型別,不能指定長度

--引數只能出現在select語句=號的右側

cursor c2(no number,pjob varchar2) is select emp.* from emp

where deptno = no and job=pjob;

c1rec c1%rowtype;

c2rec c2%rowtype;

--定義變數的時候要指定長度

v_job varchar2(20);

begin

--部門

for c1rec in c1 loop

--引數在游標中使用

for c2rec in c2(c1rec.deptno,'manager') loop

dbms_output.put_line(c1rec.deptno||'-'||c2rec.ename);

end loop;

end loop;

end;

(4)引用游標/動態游標

-- select語句是動態的

declare

--定義乙個型別(ref cursor)弱型別

type cur is ref cursor;

--強型別(返回的結果集有要求)

type cur1 is ref cursor return emp%rowtype;

--定義乙個ref cursor型別的變數

cura cur;

c1rec emp%rowtype;

c2rec dept%rowtype;

begin

dbms_output.put_line('輸出員工') ;

open cura for select * from emp;

loop

fetch cura into c1rec;

exit when cura%notfound;

dbms_output.put_line(c1rec.ename) ;

end loop ;

dbms_output.put_line('輸出部門') ;

open cura for select * from dept;

loop

fetch cura into c2rec;

exit when cura%notfound;

dbms_output.put_line(c2rec.dname) ;

end loop;

close cura;

end;

oracle游標輸出逗號問題,oracle 游標輸出逗號問題

substr record,1,length record 1 這樣去去掉最後乙個逗號了!如果非要判斷最後一行的話,我一般都是在sql語句裡取個count 就是這個sql一共可以取出多少條資料 然後在迴圈的時候用乙個變數累加,當變數等於sql取出的count的時候,就是最後一條資料!可以換一種思路,...

使用游標經常消失,使用word, 游標經常消失

我也遇到好久了,剛才無意中把魯大師給刪了後,就完美的解決了,所以可能是新裝的一些程式的問題 魅力獅子 游標沒了是指游標跑到了當前位置以外?建議通過按鍵盤的 tab 先檢視游標是跑到別的地方了還是確實消失了。通過不斷按tab鍵,可以在螢幕各功能按鈕間切換。如果是tab鍵能看到在其他位置了,那說明是滑鼠...

oracle中欄位分別求和,oracle中欄位分別求和

可以通過sum case函式來實現,參考如下select sum case zbxpbh when 3032 then 1 else 0 end suma,sum case zbxpbh when 0000 then 1 else 0 end sumb,sum case zbxpbh when 30...