--基于表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,全称为“Procedural Language/Structured Query Language”,是Oracle数据库系统中的一个强大编程语言,它结合了SQL的查询能力与过程性编程语言的功能。本资料《Oracle PLSQL 从入门到精通》旨在帮助...
这篇“Oracle PL/SQL常见操作练习”旨在帮助初学者和有经验的开发人员更好地理解和掌握在Oracle环境中使用PL/SQL进行数据库操作的各种技巧。 在PL/SQL中,我们首先会接触到基本的语法结构,如声明变量、游标、条件...
Oracle PL/SQL是Oracle数据库系统中的一个强大工具,它结合了SQL的数据操作能力和...对于初学者,可以参考《Oracle PLSQL存储过程以及函数编写.pdf》和《本地规范实例详解.pdf》等资料,结合实际练习来巩固理论知识。
Oracle PLSQL编程是数据库管理与开发中的核心技术,尤其在企业级应用系统中广泛使用。PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库提供的一个过程化语言,它结合了SQL的查询功能和传统的...
根据给定的文件信息,我们可以深入探讨Oracle PL/SQL中的几个关键知识点,这些知识点与创建数据库表、添加主键约束、以及数据插入操作密切相关。以下是对这些知识点的详细解析: ### 1. 创建数据库表 在Oracle...
"Oracle数据库练习PPT"可能包含一系列关于Oracle数据库管理、表的创建、索引、视图、触发器、存储过程、游标以及数据库安全等内容的教程。通过这些PPT,初学者可以了解到如何设计和操作Oracle数据库,包括数据类型、...
- PL/SQL代码以块为单位编写,包括匿名块(直接在SQL*Plus或其他开发工具中编写)和命名块(如存储过程、函数、触发器)。 4. **过程和函数**: - 过程是一组PL/SQL语句,没有返回值,用于执行特定任务。 - 函数...
PLSQL Developer是一种功能强大的Oracle数据库开发工具,提供了许多功能来帮助开发者快速编写和管理存储过程、存储函数和触发器等高级数据库对象。本文将详细介绍如何使用PLSQL Developer编写和管理存储过程、存储...
PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库提供的一种编程语言,它结合了SQL的查询功能和过程式编程语言的控制结构。在PL/SQL中,存储过程是一种预编译的代码单元,可以包含SQL语句、...
这份"Oracle及PLSQL培训资料"PDF文件很可能会包含这些主题的详细讲解,以及实例和练习,帮助学习者逐步提升在Oracle数据库管理和PL/SQL编程方面的专业能力。通过深入学习和实践,你将能够熟练掌握Oracle数据库系统,...
SQL 及 PL/SQL 练习题 ...实验五和实验六为高级练习,涉及到游标和存储过程等高级概念。 在学习这些练习时,学习者需要具备基本的 Oracle SQL 和 PL/SQL 知识,并对 Oracle 数据库管理系统有所了解。
这是基于Oracle的存储过程的小练习,大家可以参照着练习练习,下载一个Typora即可查看编辑
《Oracle练习张烈张建中》分为两个部分,可能是一个综合性的Oracle数据库练习集,由张烈和张建中两位专家编写。这部分内容将理论与实践相结合,通过一系列的实战练习,帮助学习者巩固所学知识,提高在实际工作中的...
Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和灵活性主要体现在它的函数和存储过程上。本资源包“oracle函数大全与存储过程语法-中文.rar”涵盖了从Oracle 9i到10G版本的函数和存储过程的详细...
Oracle PL/SQL是Oracle数据库的核心组成部分,主要用于开发存储过程、函数、触发器等数据库应用程序。它具有以下关键知识点: 1. **基础语法**:PL/SQL由声明部分、执行部分和异常处理部分组成。声明部分定义变量、...
PL/SQL是Oracle数据库系统中用于处理结构化查询语言(SQL)的一种过程化语言,它结合了SQL的查询能力与高级编程语言的功能,使得数据库管理和应用程序开发更为高效。 在Oracle PL/SQL Programming V3中,读者可以...
在Oracle中,PLSQL的使用对于新手来说可能会有些挑战,但通过一些实例和练习,可以快速上手。下面我们将深入探讨PLSQL的基础概念和关键特性: 1. **声明变量**:在PLSQL中,你可以声明各种类型的变量,如 NUMBER、...
Oracle PL/SQL是一种过程化SQL语言,它在标准SQL的基础上扩展了变量、控制结构、过程和函数等结构化编程元素,使得...通过不断的练习和实验,可以熟练掌握PL/SQL,从而在Oracle数据库管理和应用开发中发挥重要作用。