PLSQL遊標的使用
阿新 • • 發佈:2019-02-17
1.使用無參游標cursor,查詢所有員工的姓名和工資【如果需要遍歷多條記錄時,使用游標cursor,無記錄找到使用cemp%notfound】
declare --定義遊標 cursor cemp is select ename,sal from emp; --定義變數 vename emp.ename%type; vsal emp.sal%type; begin --開啟遊標,這時遊標位於第一條記錄之前 open cemp; --迴圈 loop --向下移動遊標一次 fetch cemp into vename,vsal; --退出迴圈,當遊標下移一次後,找不到記錄時,則退出迴圈 exit when cemp%notfound; --輸出結果 dbms_output.put_line(vename||'--------'||vsal); end loop; --關閉遊標 close cemp; end; /
2.使用帶參游標cursor,查詢10號部門的員工姓名和工資
3.使用無參游標cursor,真正給員工漲工資,ANALYST漲1000,MANAGER漲800,其它漲400,要求顯示編號,姓名,職位,薪水declare cursor cemp(pdeptno emp.deptno%type) is select ename,sal from emp where deptno=pdeptno; pename emp.ename%type; psal emp.sal%type; begin open cemp(&deptno); loop fetch cemp into pename,psal; exit when cemp%notfound; dbms_output.put_line(pename||'的薪水是'||psal); end loop; close cemp; end; /
declare cursor cemp is select empno,ename,job,sal from emp; pempno emp.empno%type; pename emp.ename%type; pjob emp.job%type; psal emp.sal%type; begin open cemp; loop fetch cemp into pempno,pename,pjob,psal; --迴圈退出條件一定要寫 exit when cemp%notfound; if pjob='ANALYST' then update emp set sal = sal + 1000 where empno = pempno; elsif pjob='MANAGER' then update emp set sal = sal + 800 where empno = pempno; else update emp set sal = sal + 400 where empno = pempno; end if; end loop; commit; close cemp; end; /