Oracle sql创建触发器来解决公司加班时间的问题?

时间:2015-08-12 00:17:31

标签: sql oracle triggers

所以我在oracle数据库中有以下表格,关于公司Funtom:

Funtom_employee

emp_ID
Emp_firstname
Emp_surname
Emp_department
emp_street
emp_town
emp_district
Emp_grade
Emp_site
Employee_status
Employee_termination
Employee_start

Funtom_grade

Grade_ID
Grade_rate
Grade_hours

Funtom_timesheet

Timesheet_ID
Timesheet_emp
Timesheet_wc
Timesheet_hours
Timesheet_OT
Timesheet_approved

当用户将有关员工每周工作的数据插入到Funtom_timesheet中时,他会插入属性Timesheet_emp,Timesheet_hours和Timesheet_wc(周开始)。

然而,插入的timesheet_hours包括正常的合约时间和加班时间。表Funtom_timesheet包含需要填写的属性Timesheet_OT。

每位员工都拥有自己的等级,该等级决定了与Funtom_grade表中的员工签订了多少小时(正常时间)。

我需要创建一个触发器,通过将用户插入的总小时数加起来并消除与Funtom_grade表中的员工签订的小时数(正常时间),自动生成超时小时数。 / p>

任何人都可以为我创造自己的方式来创造自己的方式吗?

到目前为止我有以下版本

CREATE TRIGGER trg_timesheet_hours
AFTER UPDATE ON Funtom_timesheet 
FOR EACH ROW

DECLARE
V_contracted_hours number;
V_OT_hours number;
V_normal_hours;
V_emp_grade;

BEGIN
V_OT_hours := 0

Select Emp_grade into V_emp_grade from Funtom_employee
WHERE Emp_ID = :new.timesheet_emp;

Select Grade_hours into V_contracted_hours from Funtom_grade
WHERE grade_ID = V_emp_grade;

Select :new.Timesheet_hours - V_contracted_hours into V_OT_hours from Funtom_timesheet;

Select :new.Timesheet_hours - V_OT_hours into V_normal_hours;
:new.Timesheet_hours := V_normal_hours;

IF V_OT_hours != 0 THEN

INSERT INTO Funtom_timesheet(Timesheet_hours)
VALUES (V_OT_hours)
WHERE timesheet_emp = :new.timesheet_emp;

END IF

End;
/

0 个答案:

没有答案