概念:
游標又名游標,是乙個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...