【雪野实训记录】Oracle数据库 T6作业——游标管理
题目: 一、按下列要求完成 部门表 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,%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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |