1,用游標顯示所有部門編號與名稱,以及其所擁有的員工人數。
declare
cursor cur_dept is
select dname,deptno, count(*) v_count from ( select d.deptno,d.dname from dept d inner join emp e on d.deptno=e.deptno where d.deptno=e.deptno) group by dname,deptno; begin
for v_emp in cur_dept loop dbms_output.put_line('部門編號 '||v_emp.deptno||
'部門名稱 '||v_emp.dname||
'總數 '||v_emp.v_count); end loop; end;
2,用游標屬性%rowcount實現輸出前十個員工的信息
declare
cursor cur_emp is select *from emp; begin
for v_emp in cur_emp loop if cur_emp%rowcount<=10 then dbms_output.put_line(cur_emp%rowcount||' '||' 員工編號 '||v_emp.empno||
' 員工姓名 '||v_emp.empno||' 員工工作 '||v_emp.job||
' 入職日期 '||v_emp.hiredate||' 基本工資 '||v_emp.sal); end if; end loop; end;
3,通過使用游標來顯示dept表中的部門名稱,及其相應的員工列表(提示:可以使用雙重循環)。
declare
cursor cur_emp is select * from emp; cursor cur_dept is select * from dept; begin
for v_dept in cur_dept loop dbms_output.put_line('員工部門:'||v_dept.dname); for v_emp in cur_emp loop if v_emp.deptno=v_dept.deptno then dbms_output.put_line('員工姓名:'||v_emp.ename); end if; end loop; end loop; end;
4,接受一個部門號,使用For循環,從emp表中顯示該部門的所有雇員的姓名,工作和薪水。
declare
cursor cur_emp (v_deptno number) is select*from emp where deptno=v_deptno; type emp_table_type is table of emp%rowtype index by binary_integer; v_emp emp_table_type; begin
open cur_emp(20); fetch cur_emp bulk collect into v_emp; close cur_emp; for v_i in v_emp.first..v_emp.last loop dbms_output.put_line('員工姓名 '||v_emp(v_i).ename||
'員工工作 '||v_emp(v_i).job||
'員工薪水 '||v_emp(v_i).sal); end loop; end;
5,編寫一個程序塊,將emp表中前5人的名字,及其出的工資等級(salgrade)顯示出來。
declare
cursor cur_emp ( v_deptno varchar2) is select ename, job,sal from emp where deptno=(select deptno from dept where dname=v_deptno); begin
for v_emp in cur_emp('SALES') loop dbms_output.put_line(' 員工姓名 '||v_emp.ename||
' 員工工作 '||v_emp.job||
' 員工薪水 '||v_emp.sal); end loop; end;
7,用游標獲取所有收入超過2000的銷售員(job為salesman)的信息
declare
cursor cur_emp is select * from emp; begin
for v_emp in cur_emp loop if v_emp.job='SALESMAN' and v_emp.sal>1500 then dbms_output.put_line(' 員工姓名 '||v_emp.ename||
' 基本工資 '||v_emp.sal); end if; end loop; end;
8,編寫一個PL/SQL程序塊,從emp表中對名字以"A"或"S"開始的所有雇員按他們基本薪水的10%給他們加薪。
declare
cursor cur_emp is select * from emp where (ename like 'A%') or (ename like 'S%'); begin
for v_emp in cur_emp loop update emp set sal=sal+sal*0.1 where ename=v_emp.ename; dbms_output.put_line('修改成功'); end loop; end;