PL/SQL第三章--游標

爪哇島的流浪漢發表於2018-08-06

游標 就是一個結果集 相當於java中的resultset

語法: cursor 游標名 [(引數名 資料型別【引數名 資料型別】...)] is select 語句;

開啟游標-- open c1;

關閉游標-- close c1;

取一行游標的值-- fetch c1 into 變數名;(取一行到變數中)

 

游標的屬性

%found

%notfound

 

案例-1 使用游標查詢員工姓名和工資,並列印

set serveroutput on

declare

--定義一個游標

cursor cemp is select ename,sal from emp;

--為游標定義對應的變數

pename emp.ename%type;

psal emp.sal%type;

begin

--開啟游標

open cemp;

loop

--取一條記錄

fetch cemp into pename,psal;

--迴圈什麼時候退出?fetch語句不一定能取到記錄

exit when cemp%notfound;

--列印

dbms_output.put_line(pename||'的薪水是'||psal);

end loop;

--關閉游標

close cemp;

end;

/

例項:給員工漲工資

set serveroutput on 

declare

--定義游標代表給哪些員工漲工資

cursor cemp is select empno,empjob from emp;

pempno emp.empno%type;

pjob       emp.empjob%type;

begin

rollback;

open cemp;

loop

fetch cemp into pempno,pjob;

exit when cemp%notfound;

if pjob='PRESIDENT' then update emp set sal=sal+1000 where empno=pempno;

elsif pjob='MANAGER' then update emp set sal=sal+800 where empno=pempno;

end if;

end loop;

close cemp;

--對於oracle預設的事務隔離級別是read commited

--事務的ACID: 原子性 一致性 隔離性 永續性

commit;

dbms_output.put_line('漲工資完成');

end;

/

 

游標的屬性

%found %notfound %isopen判斷游標是否開啟 %rowcount影響的行數

游標的限制

預設情況下oracle資料庫只允許在同一個會話中,開啟300個游標

修改系統的引數設定

alter system set open_cursors=400 scope=both;

scope的取值:both memory spfile(資料庫需要重啟)

 

帶引數的游標

語法: cursor 游標名 [(引數名 資料型別【引數名 資料型別】...)] is select 語句;

--查詢某個部門中員工的姓名

set serveroutput on

declare

--定義帶引數的游標

cursor cemp(dno number) is select ename from emp where deptno=dno;

pename emp.ename%type

begin

open cemp(10);

loop

--取出每個員工的姓名

fetch cemp into pename;

exit when cemp%notfound;

end loop;

end;

/

 

 

 

 

 

 

相關文章