Chinaunix首页 | 论坛 | 博客
  • 博客访问: 925194
  • 博文数量: 264
  • 博客积分: 10107
  • 博客等级: 上将
  • 技术积分: 2455
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-09 16:34
文章分类

全部博文(264)

文章存档

2012年(1)

2011年(11)

2010年(128)

2009年(82)

2008年(42)

我的朋友

分类: Oracle

2009-07-21 09:27:36

oracle plsql开发之三:存储过程综合练习

--基于表emp和dept
--构造Procedure change_salary
--参数:ename in varchar2
        salary in number
        v_job out varchar2
        v_dname out varchar2
--先查找指定员工,如果查出多条记录,提示并异常退出;如果没有该名员工,提示并异常退出。
--如果非上述情况,先判断该名员工的职位,如果职位不是'MANAGER',且要修改的薪水大于8000,拒绝修改并提示:“普通员工不能赚这么多薪水”。
--否则修改该名员工的薪水,
--输出参数:该职员的职位,和所在部门的名字,并打印输出。

--构造上述过程,并写出在SQL Editor中的调试代码(给出调用方式)

 

存储过程源代码如下:

Sql代码 复制代码
  1. create or replace procedure change_salary(   
  2.        v_ename in emp.ename%TYPE,   
  3.        v_salary in emp.sal%TYPE,   
  4.        v_job out emp.job%TYPE,   
  5.        v_dname out dept.dname%TYPE   
  6. )   
  7. is  
  8.        v_empno emp.empno%TYPE;   
  9.        too_many_salary exception;         
  10. begin  
  11.      select e.empno, e.job, d.dname into v_empno, v_job, v_dname   
  12.      from emp e, dept d   
  13.      where e.deptno = d.deptno   
  14.      and upper(ename) = upper(v_ename);   
  15.         
  16.      if v_job <> 'MANAGER' and v_salary > 8000 then  
  17.         raise too_many_salary;   
  18.      end if;   
  19.         
  20.      update emp set sal = v_salary where empno = v_empno;   
  21.      if sql%found then  
  22.         dbms_output.put_line('员工姓名为' || v_ename || '的员工的工资已经修改为' || v_salary);   
  23.      end if;   
  24. exception   
  25.          when no_data_found then  
  26.               dbms_output.put_line('您输入的人员姓名' || '对应信息不存在');   
  27.          when too_many_rows then  
  28.               dbms_output.put_line('人员姓名为'||v_ename ||'不止一个,无法更新!');   
  29.          when too_many_salary then  
  30.               dbms_output.put_line('你输入的工资过高,无法录入');   
  31.          when others then  
  32.               dbms_output.put_line(sqlcode || sqlerrm);   
  33.             
  34. end;  

 

测试代码如下:

Sql代码 复制代码
  1. declare  
  2.        v_out_job emp.job%type;   
  3.        v_out_dname dept.dname%type;   
  4. begin  
  5.      change_salary('jones', 8500, v_out_job, v_out_dname);   
  6. end;  

 

阅读(1507) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~