【雪野实训记录】Oracle数据库 T6作业——游标管理

版权声明:进击的葱 https://blog.csdn.net/qlwangcong518/article/details/77053591

题目:

一、按下列要求完成

部门表

create  table dept(

   deptno varchar2(10)Primary key,--部门编号

   dname  varchar2(20),   --部门名称

   loc    varchar2(200)    --部门地址

员工表

create table emp(

  empId  varchar2(10) primary key,

  ename  varchar2(20), --姓名

  deptnovarchar2(10),  --部门编号

  job    varchar2(20),  --工种

  hiredate date,      --参加工作日期

  sal    number(8,2) --工资

1:任意执行一个update操作,用隐式游标sql的属性%found,%notfound,%rowcount,%isopen观察update语句的执行情况。

2: 使用游标和loop循环来显示所有部门的名称

3:使用游标和while循环来显示所有部门的的地理位置(用%found属性)

4:接收用户输入的部门编号,用for循环和游标,打印出此部门的所有雇员的所有信息(使用循环游标)

5:向游标传递一个工种,显示此工种的所有雇员的所有信息(使用参数游标)



解析:

--1:任意执行一个 update操作,用隐式游标sql的属性%found,%notfound,%rowcount,%isopen观察update语句的执行情况。
begin
update emp
set sal=sal*1.5
where empno='7369';
if sql%found then
dbms_output.put_line('语句影响了一行或多行');
end if;
if sql%notfound then
dbms_output.put_line('语句没有影响任何行');
end if;
if sql%isopen then
dbms_output.put_line('游标的打开状态为:false');
else
dbms_output.put_line('游标的打开状态为:true');
end if;
dbms_output.put_line('语句影响的行数位'||sql%rowcount);
end;

--2: 使用游标和loop循环来显示所有部门的名称
declare
   v_dname dept.dname%type;
   cursor dept_cur is select dname from dept;
begin
   open dept_cur;
   loop
     fetch dept_cur into v_dname;
     exit when dept_cur%notfound;
     dbms_output.put_line(v_dname);
   end loop;
   close dept_cur;
end;

--3:使用游标和while循环来显示所有部门的的地理位置(用%found属性)

declare
   v_loc dept.loc%type;
   cursor dept_cur is select loc from dept;
begin
   open dept_cur;
   fetch dept_cur into v_loc;
   while dept_cur%found loop
         dbms_output.put_line(v_loc);
         fetch dept_cur into v_loc;
   end loop;
end;

--4:接收用户输入的部门编号,用for循环和游标,打印出此部门的所有雇员的所有信息(使用循环游标)
declare
  cursor  emp_cur is select * from emp where deptno = '&deptno';
begin
  for empinfo in emp_cur loop
     dbms_output.put_line(empinfo.empno||' '||empinfo.ename||' '||empinfo.job||' '||empinfo.mgr||' '||empinfo.hiredate||' '||empinfo.sal||' '||empinfo.comm||' '||empinfo.deptno);
  end loop;
end;

--5:向游标传递一个工种,显示此工种的所有雇员的所有信息(使用参数游标)
declare
cursor cur_job(V_JOB EMP."JOB"%type) is select * from EMP where job=V_JOB;
V_EMP EMP%ROWTYPE;
begin
open CUR_JOB('CLERK');
loop
fetch CUR_JOB into V_EMP;
exit when CUR_JOB%NOTFOUND;
 dbms_output.put_line('编号:' || V_EMP.empno || '  姓名:' || V_EMP.ename ||
                       '     职位:' || V_EMP.job || '    上级领导编号:' ||
                      V_EMP.mgr || '     雇佣日期:' || V_EMP.hiredate ||
                       '      工资:' ||V_EMP.sal || '     奖金:' ||
                       V_EMP.comm || '  部门:' || V_EMP.deptno);
end loop;
close cur_job;
end;

猜你喜欢

转载自blog.csdn.net/qlwangcong518/article/details/77053591