答案: set serveroutput on; sys.dbms_output.put_line(‘更新前: ‘); select empno 员工编号, ename 姓名, job 职位,sal 工资 from scott.emp; declare var_empno scott.emp.empno%type:=&员工编号; var_job scott.emp.job%type; var_sal scott.emp.sal%type; begin select job,sal into var_job,var_sal from scott.emp where empno = var_empno; if var_job = ‘CLERK’ then var_sal := var_sal+500; sys.dbms_output.put_line(‘更新成功!,工资上涨500元’); elsif var_job = ‘SALESMAN’ then var_sal := var_sal+1000; sys.dbms_output.put_line(‘更新成功!,工资上涨1000元’); elsif var_job = ‘ANALYST’ then var_sal := var_sal+1500; sys.dbms_output.put_line(‘更新成功!,工资上涨1500元’); else var_sal := var_sal+2000; sys.dbms_output.put_line(‘更新成功!,工资上涨2000元’); end if; update scott.emp set sal = var_sal where empno = var_empno; select job,sal into var_job,var_sal from scott.emp where empno = var_empno; sys.dbms_output.put_line(‘员工编号为’||var_empno||‘的职工的职位是’||var_job||’,他现在的工资是’||var_sal||‘元’); end; / 保存成q4.txt; 5. 编写一个PL/SQL程序块,利用显式游标,将emp表中雇员名字全部显示出来(要求:使用for循环)。 答案: set serveroutput on; declare cursor cur_emp is select * from scott.emp; begin sys.dbms_output.put_line(‘本题要求:编写一个PL/SQL程序块,利用显式游标,将emp表中雇员名字全部显示出来(要求:使用for循环)。’); sys.dbms_output.put_line(‘姓名’); for var_emp in cur_emp loop sys.dbms_output.put_line(var_emp.ename); end loop; end; / 保存成q5.txt 6. 编写PL/SQL程序块,通过使用显式游标,来显示dept表中的部门名称。(要求:使用while循环) 答案: set serveroutput on; declare cursor cur_dept is select dname from scott.dept; var_dname scott.dept.dname%type; begin sys.dbms_output.put_line(‘本题要求: 编写PL/SQL程序块,通过使用显式游标,来显示dept表中的部门名称。(要求:使用while循环)’); sys.dbms_output.put_line(‘部门名称’); open cur_dept; fetch cur_dept into var_dname; while cur_dept%found loop sys.dbms_output.put_line(var_dname); fetch cur_dept into var_dname; end loop; close cur_dept; end; / 保存成q6.txt; 7. 编写PL/SQL程序块,利用隐式游标,使用For循环,从emp表中查询该部门号为10的所有雇员的姓名,工作和工资。 答案: set serveroutput on; begin sys.dbms_output.put_line(‘编写PL/SQL程序块,利用隐式游标,使用For循环,从emp表中查询该部门号为10的所有雇员的姓名,工作和工资。’); for x in (select ename,job,sal from scott.emp where deptno = 10) loop sys.dbms_output.put_line(‘雇员姓名: ‘||x.ename||’,雇员工作:’||x.job||’,雇员工资: '||x.sal); end loop; end; / 保存成q7.txt; 8. 模仿课本P122的例题6-19,练习带参数的游标。要求将部门号作为参数,初始值为10号部门。使用游标时,部门号是由用户随意输入(提示:随意输入,需要使用 ‘&’)。要求显示出用户任意输入的部门号的所有雇员的姓名,工作和工资。 (要求:使用while循环) 答案: set serveroutput on; declare var_ename scott.emp.ename%type; var_job scott.emp.job%type; var_sal scott.emp.sal%type; cursor cur_emp(var_deptno in int :=10) is select ename,job,sal from scott.emp where deptno = var_deptno;
begin sys.dbms_output.put_line(‘模仿课本P122的例题6-19,练习带参数的游标。要求将部门号作为参数,初始值为10号部门。使用游标时,部门号是由用户随意输入(提示:随意输入,需要使用 ‘&’)。要求显示出用户任意输入的部门号的所有雇员的姓名,工作和工资。 (要求:使用while循环)’); open cur_emp(&部门编号); fetch cur_emp into var_ename,var_job,var_sal; while cur_emp%found loop sys.dbms_output.put_line(‘员工姓名:’||var_ename||’, 员工职位:’||var_job||’, 员工工资:’||var_sal); fetch cur_emp into var_ename,var_job,var_sal; end loop; close cur_emp; end; / 保存成q8.txt; 9. 模仿课本P122的例题6-19,练习带参数的游标。要求将部门号作为参数,无初始值。部门号可由用户随意输入。要求显示出用户任意输入的部门号的所有雇员的姓名,工作和工资。 (要求:使用for循环) 答案: set serveroutput on; declare cursor cur_emp(var_deptno in int) is select ename,job,sal from scott.emp where deptno = var_deptno; begin sys.dbms_output.put_line(‘模仿课本P122的例题6-19,练习带参数的游标。要求将部门号作为参数,无初始值。部门号可由用户随意输入。要求显示出用户任意输入的部门号的所有雇员的姓名,工作和工资。 (要求:使用for循环)’); for var in cur_emp(&部门编号) loop sys.dbms_output.put_line(‘员工姓名:’||var.ename||‘员工职位:’||var.job||‘员工工资:’||var.sal); end loop; end; / 保存成q9.txt; 10. 编写一个PL/SQL程序块,利用游标(显式或隐式游标),从emp表中对名字以“A”或“S”开头的所有雇员,按他们基本工资的10%给他们加薪。(提示:在循环中使用update更新) 答案: set serveroutput on; select ename 员工姓名,sal 工资 from scott.emp where ename like ‘A%’ or ename like ‘S%’; declare cursor cur_emp is select ename,sal from scott.emp where ename like ‘A%’ or ename like ‘S%’; var_sal scott.emp.sal%type; var_ename scott.emp.ename%type; begin sys.dbms_output.put_line(‘编写一个PL/SQL程序块,利用游标(显式或隐式游标),从emp表中对名字以“A”或“S”开头的所有雇员,按他们基本工资的10%给他们加薪。(提示:在循环中使用update更新)’); for var in(select * from scott.emp where ename like ‘A%’ or ename like ‘S%’) loop update scott.emp set sal = var.sal1.1 where ename = var.ename; end loop; sys.dbms_output.put_line(‘更新后:’); sys.dbms_output.put_line(‘员工姓名 工资’); sys.dbms_output.put_line(’---------- ----------’); open cur_emp; fetch cur_emp into var_ename,var_sal; while cur_emp%found loop sys.dbms_output.put_line(var_ename||’ '||var_sal); fetch cur_emp into var_ename,var_sal; end loop; close cur_emp; end; / 保存成q10.txt; 11. 编写一个PL/SQL程序块,利用游标(显式或隐式游标),在emp表中,所有雇员按他们基本工资的10%给他们加薪,但是只给加薪后的工资小于5000的雇员涨工资。 答案: set serveroutput on; select ename 员工姓名,sal 工资 from scott.emp; declare cursor cur_emp is select ename,sal from scott.emp; var_sal scott.emp.sal%type; var_ename scott.emp.ename%type; begin sys.dbms_output.put_line(‘编写一个PL/SQL程序块,利用游标(显式或隐式游标),在emp表中,所有雇员按他们基本工资的10%给他们加薪,但是只给加薪后的工资小于5000的雇员涨工资。’); for var in (select * from scott.emp) loop if var.sal1.1 < 5000 then update scott.emp set sal = var.sal*1.1 where ename = var.ename; end if; end loop; sys.dbms_output.put_line(‘更新后:’); sys.dbms_output.put_line(‘员工姓名 工资’); sys.dbms_output.put_line(’---------- ----------’); open cur_emp; fetch cur_emp into var_ename,var_sal; while cur_emp%found loop sys.dbms_output.put_line(var_ename||’ '||var_sal); fetch cur_emp into var_ename,var_sal; end loop; close cur_emp; end; / 保存成q11.txt;