题目:
一、按下列要求完成
部门表
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;