PL/SQL 综合复习题(2)
案例介绍
某数据库有三张表,是关于某公司员工资料、薪水,部门和工作地点信息的,它们分别是emp表, dept表,和location表. 三张表的结构如下:
Emp: 用于存储员工的工号,姓名,工资信息。
Column name |
Date type |
Is null |
Primary Key |
comment |
Emp_id |
Number(5) |
False |
Yes |
|
Emp_name |
Varchar2(20) |
False |
|
|
Emp_salary |
Number(6) |
|
|
|
Dept_id |
Number(5) |
False |
|
Foreign Key |
Dept:用于记录部门信息,部门名称
Column name |
Date type |
Is null |
Primary Key |
comment |
Dept_id |
Number(5) |
False |
Yes |
|
Dept_name |
Varchar2(20) |
False |
|
|
Loc_id |
Number(5) |
False |
|
Foreign Key |
Location:用于记录办公地点信息,办公地点名称
Column name |
Date type |
Is null |
Primary Key |
comment |
Loc_id |
Number(5) |
False |
Yes |
|
Loc_name |
Varchar2(20) |
False |
|
|
1、按照上表结构建立相应的表并插入下面的测试数据.
2. 创建一个存储过程来计算每个BUILDING 里上班的总员工数, 如果有没有员工工作的BUILDING, 用异常来显示一条错误信息.
3.创建并应用一个修改工资的游标,为指定部门的员工按照一定规则进行加薪。规则如下:
原工资 <= 2000 , 加薪25% ;
2000<原工资 <= 3000 , 加薪15%
3000< 原工资 <=5000 , 加薪8%;
5000 > 原工资 , 加薪4%
要求: 需要有一个为单个员工进行加薪的函数. 该函数有两个IN的参数, 员工编号和加薪幅度, 并返回加薪后的总薪水.
需要有一个为单个部门内的所有员工进行加薪的存储过程. 该过程有一个IN的参数, 部门名字, 和一个OUT 的参数, 该部门的总薪资. 该过程将通过一个带参数的游标来调用为单个员工加薪的函数来为每个部门员工计算薪水.
4.创建一个触发器记录上题中员工ID,加薪前和加薪后的薪资。
5. 因为BUILDINGA 要装修, 将BUILDINGA 里的所有员工搬去BUILDINGC里面, 并给每个员工500圆的补贴费. 该补贴费由部门来发放, 所以需要知道每个部门应该付出的补贴费.
EMP_ID |
EMP_NAME |
EMP_SALARY |
DEPT_ID |
00101 |
AARON |
4200 |
005 |
00203 |
CLARA |
3600 |
002 |
00507 |
CHRIS |
2500 |
005 |
00045 |
SAM |
1500 |
005 |
00406 |
JACK |
2200 |
004 |
TEST DATA FOR TBALE EMP
DEPT_ID |
DEPT_NAME |
LOC_ID |
001 |
HR |
01005 |
002 |
ADMIN |
01001 |
003 |
TR |
01005 |
004 |
MARKETING |
01005 |
005 |
IT |
01001 |
TEST DATA FOR TABLE DEPT
LOC_ID |
LOC_NAME |
01001 |
BUILDINGA |
01005 |
BUIDLINGB |
01006 |
BUILDINGC |