`
zjm16
  • 浏览: 71028 次
  • 性别: 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 PLSQL 从入门到精通》.zip

    Oracle PLSQL,全称为“Procedural Language/Structured Query Language”,是Oracle数据库系统中的一个强大编程语言,它结合了SQL的查询能力与过程性编程语言的功能。本资料《Oracle PLSQL 从入门到精通》旨在帮助...

    oracle plsql常见操作练习

    这篇“Oracle PL/SQL常见操作练习”旨在帮助初学者和有经验的开发人员更好地理解和掌握在Oracle环境中使用PL/SQL进行数据库操作的各种技巧。 在PL/SQL中,我们首先会接触到基本的语法结构,如声明变量、游标、条件...

    Oracle PL SQL存储过程以及函数编

    Oracle PL/SQL是Oracle数据库系统中的一个强大工具,它结合了SQL的数据操作能力和...对于初学者,可以参考《Oracle PLSQL存储过程以及函数编写.pdf》和《本地规范实例详解.pdf》等资料,结合实际练习来巩固理论知识。

    精通Oracle PLSQL编程

    Oracle PLSQL编程是数据库管理与开发中的核心技术,尤其在企业级应用系统中广泛使用。PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库提供的一个过程化语言,它结合了SQL的查询功能和传统的...

    oracle plsql实例练习.txt

    根据给定的文件信息,我们可以深入探讨Oracle PL/SQL中的几个关键知识点,这些知识点与创建数据库表、添加主键约束、以及数据插入操作密切相关。以下是对这些知识点的详细解析: ### 1. 创建数据库表 在Oracle...

    oracle数据库和plsql语法练习

    "Oracle数据库练习PPT"可能包含一系列关于Oracle数据库管理、表的创建、索引、视图、触发器、存储过程、游标以及数据库安全等内容的教程。通过这些PPT,初学者可以了解到如何设计和操作Oracle数据库,包括数据类型、...

    Oracle PLSQL攻略随书源码

    - PL/SQL代码以块为单位编写,包括匿名块(直接在SQL*Plus或其他开发工具中编写)和命名块(如存储过程、函数、触发器)。 4. **过程和函数**: - 过程是一组PL/SQL语句,没有返回值,用于执行特定任务。 - 函数...

    练习利用PLSQL Developer编写和管理存储过程、存储函数和触发器等

    PLSQL Developer是一种功能强大的Oracle数据库开发工具,提供了许多功能来帮助开发者快速编写和管理存储过程、存储函数和触发器等高级数据库对象。本文将详细介绍如何使用PLSQL Developer编写和管理存储过程、存储...

    plsql的存储过程

    PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库提供的一种编程语言,它结合了SQL的查询功能和过程式编程语言的控制结构。在PL/SQL中,存储过程是一种预编译的代码单元,可以包含SQL语句、...

    Oracle及PLSQL 培训资料

    这份"Oracle及PLSQL培训资料"PDF文件很可能会包含这些主题的详细讲解,以及实例和练习,帮助学习者逐步提升在Oracle数据库管理和PL/SQL编程方面的专业能力。通过深入学习和实践,你将能够熟练掌握Oracle数据库系统,...

    sql及plsql练习题

    SQL 及 PL/SQL 练习题 ...实验五和实验六为高级练习,涉及到游标和存储过程等高级概念。 在学习这些练习时,学习者需要具备基本的 Oracle SQL 和 PL/SQL 知识,并对 Oracle 数据库管理系统有所了解。

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

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

    PLSQL练习指南

    《Oracle练习张烈张建中》分为两个部分,可能是一个综合性的Oracle数据库练习集,由张烈和张建中两位专家编写。这部分内容将理论与实践相结合,通过一系列的实战练习,帮助学习者巩固所学知识,提高在实际工作中的...

    oracle函数大全与存储过程语法-中文.rar

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和灵活性主要体现在它的函数和存储过程上。本资源包“oracle函数大全与存储过程语法-中文.rar”涵盖了从Oracle 9i到10G版本的函数和存储过程的详细...

    oracle_plsql学习资料

    Oracle PL/SQL是Oracle数据库的核心组成部分,主要用于开发存储过程、函数、触发器等数据库应用程序。它具有以下关键知识点: 1. **基础语法**:PL/SQL由声明部分、执行部分和异常处理部分组成。声明部分定义变量、...

    Oracle PLSQL ProgramminV3

    PL/SQL是Oracle数据库系统中用于处理结构化查询语言(SQL)的一种过程化语言,它结合了SQL的查询能力与高级编程语言的功能,使得数据库管理和应用程序开发更为高效。 在Oracle PL/SQL Programming V3中,读者可以...

    PLSQL.zip_oracle_plsql

    在Oracle中,PLSQL的使用对于新手来说可能会有些挑战,但通过一些实例和练习,可以快速上手。下面我们将深入探讨PLSQL的基础概念和关键特性: 1. **声明变量**:在PLSQL中,你可以声明各种类型的变量,如 NUMBER、...

    Oracle plsql 基础ppt

    Oracle PL/SQL是一种过程化SQL语言,它在标准SQL的基础上扩展了变量、控制结构、过程和函数等结构化编程元素,使得...通过不断的练习和实验,可以熟练掌握PL/SQL,从而在Oracle数据库管理和应用开发中发挥重要作用。

Global site tag (gtag.js) - Google Analytics