今天做作业一道题目彻底搞晕了。越弄越乱麻烦各位大哥大姐们给指点下。别整太难的。
题目如下:新建一个存储过程CAL_REVENUES。该过程计算出EMP表雇员每年的薪水总额,年终奖,总收入,并将计算出来的数据插入到REVENUES表中。
要求:
1. 删除REVENUES表2009年的数据。
2. EMP表所有数据都作为处理对象。
3. 将年份(2009),员工编号,员工姓名,部门名,计算出的薪水总额,年终奖,总收入插入到REVENUES表中。
4. 数据全部插入成功后提交。
5. 如果出现异常,请将异常信息打印到控制台上。
6. 薪水总额,年终奖,总收入计算公式如下:总收入(REVENUES)=SALALL+BONUS;
薪水总额(SALALL)=(SAL+COMM-CAL_TAX(SAL+COMM))*12;
年终奖(BONUS)计算方法如下:i:基础值(按JOB分):
CLERK:SAL * 2.5
SALLESMAN:SAL * 2 + COMM * 4
ANALYST: SAL * 4
MANAGER: 按部门分:
ACCOUNTING : SAL * 5;
RESEATCH: SAL * 4;
SALES: SAL * 3;
OPERATIONS: SAL * 2;
其他: SAL * 1.5;
ii:根据工龄:
如果入社时间大于等于5年,在上述基础上加2000;
如果入社时间大于等于3年,小于5年,在上述基础上加1000;如果入社时间小于3年,在上述基础上加500;iii:根据请假情况(ATTENDANCE表):
如果某位员工请假天数总计大于5天,那么扣500;
如果全勤的,加500。
REVENUES表结构。表名:收入信息表(REVENUES)
字段名 数据类型 长度 可空性 要求 说明
YEARLY CHAR 4 NOT NULL 设为主键 年份
EMPNO NUMBER 4 NOT NULL 设为主键 员工番号
ENAME VARCHAR2 30 员工名
DNAME VARCHAR2 20 部门名
SALALL NUMBER 10,2 NOT NULL 默认值0 薪水总额
BONUS NUMBER 10,2 NOT NULL 默认值0 年终奖
REVENUES NUMBER 10,2 NOT NULL 默认值0 总收入
谢谢各位大哥大姐了。
题目如下:新建一个存储过程CAL_REVENUES。该过程计算出EMP表雇员每年的薪水总额,年终奖,总收入,并将计算出来的数据插入到REVENUES表中。
要求:
1. 删除REVENUES表2009年的数据。
2. EMP表所有数据都作为处理对象。
3. 将年份(2009),员工编号,员工姓名,部门名,计算出的薪水总额,年终奖,总收入插入到REVENUES表中。
4. 数据全部插入成功后提交。
5. 如果出现异常,请将异常信息打印到控制台上。
6. 薪水总额,年终奖,总收入计算公式如下:总收入(REVENUES)=SALALL+BONUS;
薪水总额(SALALL)=(SAL+COMM-CAL_TAX(SAL+COMM))*12;
年终奖(BONUS)计算方法如下:i:基础值(按JOB分):
CLERK:SAL * 2.5
SALLESMAN:SAL * 2 + COMM * 4
ANALYST: SAL * 4
MANAGER: 按部门分:
ACCOUNTING : SAL * 5;
RESEATCH: SAL * 4;
SALES: SAL * 3;
OPERATIONS: SAL * 2;
其他: SAL * 1.5;
ii:根据工龄:
如果入社时间大于等于5年,在上述基础上加2000;
如果入社时间大于等于3年,小于5年,在上述基础上加1000;如果入社时间小于3年,在上述基础上加500;iii:根据请假情况(ATTENDANCE表):
如果某位员工请假天数总计大于5天,那么扣500;
如果全勤的,加500。
REVENUES表结构。表名:收入信息表(REVENUES)
字段名 数据类型 长度 可空性 要求 说明
YEARLY CHAR 4 NOT NULL 设为主键 年份
EMPNO NUMBER 4 NOT NULL 设为主键 员工番号
ENAME VARCHAR2 30 员工名
DNAME VARCHAR2 20 部门名
SALALL NUMBER 10,2 NOT NULL 默认值0 薪水总额
BONUS NUMBER 10,2 NOT NULL 默认值0 年终奖
REVENUES NUMBER 10,2 NOT NULL 默认值0 总收入
谢谢各位大哥大姐了。
drop procedure Sum_wage
GO
create procedure Sum_wage
@PWage int,
@AWage int,
@total int
as
while (1=1)
begin
if (select count(*) from ProWage)>2*(select count(*) from ProWage where Wage>=@PWage)
update ProWage set @total=@total+@AWage,Wage=Wage+@AWage
else
break
end
print'一共加薪:'+convert(varchar,@total)+'元'
print'加薪后的程序员工资列表:'
select * from ProWage
--调用存储过程1--
exec Sum_wage @PWage=2000,@AWage=100,@total=0
exec Sum_wage @PWage=2200,@AWage=100,@total=0
exec Sum_wage @PWage=3000,@AWage=100,@total=0
exec Sum_wage @PWage=4000,@AWage=100,@total=0
exec Sum_wage @PWage=5000,@AWage=100,@total=0
exec Sum_wage @PWage=6000,@AWage=100,@total=0
这个跟你的要求相差不远if exists (select * from sysobjects where name='Sum_wage')
drop procedure Sum_wage
GO
create procedure Sum_wage
@PWage int,
@AWage int,
@total int
as
while (1=1)
begin
if (select count(*) from ProWage)>2*(select count(*) from ProWage where Wage>=@PWage)
update ProWage set @total=@total+@AWage,Wage=Wage+@AWage
else
break
end
print'一共加薪:'+convert(varchar,@total)+'元'
print'加薪后的程序员工资列表:'
select * from ProWage
--调用存储过程1--
exec Sum_wage @PWage=2000,@AWage=100,@total=0
exec Sum_wage @PWage=2200,@AWage=100,@total=0
exec Sum_wage @PWage=3000,@AWage=100,@total=0
exec Sum_wage @PWage=4000,@AWage=100,@total=0
exec Sum_wage @PWage=5000,@AWage=100,@total=0
exec Sum_wage @PWage=6000,@AWage=100,@total=0--2、创建存储过程2--
if exists (select * from sysobjects where name='Avg_wage')
drop procedure Avg_wage
GO
create procedure Avg_wage
@PWage int,
@AWage int,
@total int
as
while (1=1)
begin
if ((select Avg(Wage) from ProWage)<=@PWage)
update ProWage set @total=@total+@AWage,Wage=Wage+@AWage
else
break
end
print'一共加薪:'+convert(varchar,@total)+'元'
print'加薪后的程序员工资列表:'
select * from ProWage
--调用存储过程--
exec Avg_wage @PWage=3000,@AWage=200,@total=0
exec Avg_wage @PWage=4500,@AWage=200,@total=0