`
zjm16
  • 浏览: 69952 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
文章分类
社区版块
存档分类
最新评论

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中的调试代码(给出调用方式)


我自己写的过程:
create or replace procedure change_salary(v_ename in emp.ename%type,
                                          v_salary in emp.sal%type,
                                          v_job out varchar2,
                                          v_dname out varchar2)
is
v_ecount int default 0;
r_emp emp%rowtype;
too_many_salary exception;
begin
       select count(1) into v_ecount from emp where emp.ename=v_ename;
       if v_ecount=0 then
          raise NO_DATA_FOUND;
       elsif v_ecount>1 then
          raise TOO_MANY_ROWS;
       else
          begin
                select * into r_emp from emp where emp.ename=v_ename;
                if r_emp.job!='MANAGER' and v_salary>=8000 then
                   raise too_many_salary;
                else
                   begin
                     update emp set sal=v_salary where emp.ename=v_ename;
                     commit;
                     v_job:=r_emp.job;
                     select dname into v_dname from dept where deptno=r_emp.deptno;
                     dbms_output.put_line('职位:'||v_job||',部门:'||v_dname);
                   end;
                end if;
          end;
       end if;
      
       exception
          when NO_DATA_FOUND then dbms_output.put_line('未查询到该员工,请检查是否输入错误!');
          when TOO_MANY_ROWS then dbms_output.put_line('查询到'||v_ecount||'个员工,请检查是否输入错误!');
          when too_many_salary then dbms_output.put_line('普通员工不能赚这么多薪水!');
          when others then null;
end change_salary;

转载其他人的过程:
create or replace procedure change_salary(  
       v_ename in emp.ename%TYPE,  
       v_salary in emp.sal%TYPE,  
       v_job out emp.job%TYPE,  
       v_dname out dept.dname%TYPE  
)  
is 
       v_empno emp.empno%TYPE;  
       too_many_salary exception;        
begin 
     select e.empno, e.job, d.dname into v_empno, v_job, v_dname  
     from emp e, dept d  
     where e.deptno = d.deptno  
     and upper(ename) = upper(v_ename);  
       
     if v_job <> 'MANAGER' and v_salary > 8000 then 
        raise too_many_salary;  
     end if;  
       
     update emp set sal = v_salary where empno = v_empno;  
     if sql%found then 
        dbms_output.put_line('员工姓名为' || v_ename || '的员工的工资已经修改为' || v_salary);  
     end if;  
exception  
         when no_data_found then 
              dbms_output.put_line('您输入的人员姓名' || '对应信息不存在');  
         when too_many_rows then 
              dbms_output.put_line('人员姓名为'||v_ename ||'不止一个,无法更新!');  
         when too_many_salary then 
              dbms_output.put_line('你输入的工资过高,无法录入');  
         when others then 
              dbms_output.put_line(sqlcode || sqlerrm);  
           
end; 
测试方式:
declare
  v_job emp.job%type;
  v_dname dept.dname%type;
begin
  change_salary('BLAKE',8500,v_job ,v_dname );
  if v_job is not null then
     dbms_output.put_line('职位:'||v_job||',部门:'||v_dname);
  end if;
end;


ps:若是刚刚安装的oracle ,emp和dept表 在scott/tiger 用户中存在的
分享到:
评论

相关推荐

    练习_基于Oracle的存储过程.md

    这是基于Oracle的存储过程的小练习,大家可以参照着练习练习,下载一个Typora即可查看编辑

    pl sql 程序开发 练习

    oracle pl/sql 存储过程 oracle pl/sql 存储过程 oracle pl/sql 存储过程 oracle pl/sql 存储过程 oracle pl/sql 存储过程 单元开发习题

    oracle进阶之plsql编程

    oracle进阶之plsql编程内容提要:通过对PL/SQL基础语法和存储函数、存储过程、包、触发器等数据库对象的概念及基本语法的学习与练习,达到学以致用的目的,并能在应用程序中调用存储函数及过程。

    plsql oracle 详细 教程

    比较全和详细的oracle、pl/sql教程,非常实用,详细讲解了plsql语法、游标、存储过程和函数,很不错了资料哦!plsql 镇店之宝!

    oracle PL/SQL测试题目和详细答案

    pl/sql存储过程,函数,游标,以及存储过程中的基础知识,绝对值得你收藏的经典题目,让你的pl/sql得到最大的锻炼。让你的数据库逻辑更加灵活。

    Oracle-PL/SQL教程

    详细讲解了PLSQL的基本语法,以及储存过程、函数、触发器、游标和包。文档中还包括例子和练习。

    Oracle华育国际课件ppt

    2-数据查询及函数应用,3-理解oracle体系结构,4-数据库实现-存储和安全管理,5-数据库实现-方案对象1,6-数据库实现-方案对象2,7-PL_SQL程序设计-基础,8-PL_SQL程序设计-高级,9-触发器和综合练习,PLSQL编程综合...

    Oracle的pl/sql和sqlplus

    1.练习利用SQL*Plus编写、执行PL/SQL程序的命令。 2.记录执行命令和操作过程中遇到的问题及解决方法,注意从原理上解释原因。...3.练习利用PLSQL Developer编写和管理存储过程、存储函数和触发器等。

    PL/SQL插件VCS使用说明

    我先说说我的遭遇吧,我出差在珠海时项目组一直用这个工具,经常会两个人修改同一个包或存储过程,难免会一个人保存了把领一个人的代码冲掉了,所以习惯是修改前每个人问一遍这个包在使用么?没用我要告诉大家我在用...

    全新JAVAEE大神完美就业实战课程 超150G巨制课程轻松实战JAVAEE课程 就业部分.txt

    Oracle_day04,游标,存储过程,存储函数,触发器 11-Maven(学习2天) Maven_day01._Maven安装.Maven整合SSH Maven_day02.Maven整合SSH.私服安装配置 12-SSH企业案例2_ERP_项目整合(学习15天) ERP_day01_ERP简介...

Global site tag (gtag.js) - Google Analytics