Oracle修煉路程 PL SQL之游標的使用

2021-10-05 06:32:59 字數 3734 閱讀 5699

概念:

游標又名游標,是乙個pl/sql結構,利用游標可以命名這些工作區,並通過游標訪問工作區中的資訊。

語法:

cursor 游標名(引數列表)

isselect。。。

屬性:

%isopen 判斷游標是否開啟,所以第一步開啟游標;

%rowcount 判斷游標已經獲取資料的行數;

%found 和 %notfound 判斷是否還有下一行;

模板套路(需要記住,):

decare

cursor 游標名(cemp)

isselect..

...定義變數:

begin

open cemp;

loop

exit

when cemp%notfound;

fecth cemp into..

..endloop

;close cemp;

end;

舉例說明

1 查詢並列印所有員工的姓名及薪水;

declare

--定義游標cemp

cursor cemp is

select ename,sal from emp;

--定義兩個變數,用於存放讀取的ename和sal資料;

pename emp.ename%

type

; psal emp.sal%

type

;begin

open cemp;

--開啟游標;

loop

---迴圈,獲取每行資料

fetch cemp into pename,psal;

--獲取當前行元素,移到下一行;

exit

when cemp%notfound;

dbms_output.put_line(pename||psal)

;end

loop

;close cemp;

--關閉游標

end;

--select empno,ename,sal from emp;

set serveroutput on

;declare

cursor cemp is

select empno,ename,sal from emp;

cempno emp.empno%

type

;cename emp.ename%

type

;csal emp.sal%

type

;begin

open cemp;

loop

fetch cemp into cempno,cename,csal;

exit

when cemp%notfound;

dbms_output.put_line(

'部門編號為:'

||cempno||

'的姓名是'

||cename||

'的工資'

||csal)

;end

loop

; dbms_output.put_line(

'完畢');

close cemp;

end;

--select empno,ename,12*sal+nvl(comm,0),deptno from emp;

declare

--定義游標cemp

cursor cemp is

select empno,ename,

12*sal+nvl(comm,0)

,deptno from emp;

--定義變數,用於存放變數值;

cempno emp.empno%

type

;cename emp.ename%

type

;csal emp.sal%

type

;cdeptno emp.deptno%

type

;begin

open cemp;

loop

exit

when cemp%notfound;

fetch cemp into cempno,cename,csal,cdeptno;

dbms_output.put_line(

'部門編號為:'

||cempno||

' 員工姓名:'

||cename||

' 年薪是:'

||csal)

;end

loop

;close cemp;

end;

2 漲工資,如果是president 漲工資+1000,經理+500,其他的漲300。

--select ename,job from emp;

declare

cursor cemp is

select empno,job from emp;

cempno emp.empno%

type

;cjob emp.job%

type

;begin

open cemp;

loop

exit

when cemp%notfound;

fetch cemp into cempno,cjob;

if cjob=

'president'

then

update emp set sal=sal+

1000

where empno=cempno;

elsif cjob=

'president'

then

update emp set sal=sal+

500where empno=cempno;

else

update emp set sal=sal+

300where empno=cempno;

endif

;end

loop

;dbms_output.put_line(

'ok');

close cemp;

commit

;end

;

3 查詢某個部門的員工姓名,帶引數的游標,通過引數決定部門;

set serveroutput on

;declare

cursor cemp(dno number)

isselect ename from emp where deptno = dno;

--部門的所有名字存放在游標裡面;

pename emp.ename%

type

;begin

open cemp(30)

;loop

fetch cemp into pename;

exit

when cemp%notfound;

dbms_output.put_line(

'...'

||pename)

;end

loop

;close cemp;

end;

Oracle修煉路程 觸發器

概念 與表相關聯的plsql程式,當執行dml 增刪改 自動執行觸發器 建立語法 create or replace trigger 觸發器名 before after 在dml之前或者之後 delete insert update of 列名 dml語句 on 表名 操作某個表 for each ...

Oracle修煉路程 字串函式

一 lower 小寫 二 upper 大寫 三 initcap 首字母大寫 用法舉例 sql select lower iloveu,china 小寫,upper iloveu,china 大寫,initcap iloveu,china 首字母大寫 from dual 小寫 大寫 首字母大寫 ilo...

Oracle的pl sql程式設計

1pl sql程式設計 1.1建立過程過程 create or replace procedure 引數名 in out 引數型別 沒有長度 名字 is begin pl sql程式設計語句 end 名字 ps 最有一定要加分號和斜槓 1.2呼叫 exec 過程名 引數 call 過程名 引數名 1...