0
p_start_date = 13.Apr.2012 13:00
p_end_date = 13.Apr.2012 15:00
working_hours = 0
// in this Situation working_hours should be 2
情況2:
p_start_date = 13.Apr.2012 13:00
p_end_date = 14.Apr.2012 15:00
working_hours = 24
// in this Situation working_hours should be 26
,當我在SQLDevelopper
與Situation 1
和Situation 2
運行此,對於working_hours
值是正確返回。但我在Before Insert Update Trigger
中將此過程稱爲用於我的apex應用程序。當我提交表格的形式Situation 1
,對於working_hours
值爲0
,當我提交表格的形式Situation 2
,對於working_hours
值爲24
。
根據Situation 1
和Situation 2
,兩個日期之間的差異分配到working_hours。但我需要的是兩次之間的差異。
我怎麼能這樣做呢?
我的程序計算working_hours
是,
PROCEDURE get_labour_cost_data(
p_employee_id IN NUMBER,
p_start_date IN VARCHAR2,
p_end_date IN VARCHAR2,
hours_normal_rate OUT NUMBER,
working_hours OUT NUMBER,
total_cost OUT NUMBER)
AS
v_employee_rate NUMBER;
BEGIN
if p_employee_id is null then
hours_normal_rate := 0;
working_hours := 0;
total_cost := 0;
elsif p_employee_id is not null then
-- Get hourse_noraml from employee
select HOURLY_SALARY into hours_normal_rate from Employee
where EMPLOYEE_ID = p_employee_id;
-- Get working hours
working_hours := 24 * (to_date(p_end_date, 'dd.mm.rr hh24:mi') - to_date(p_start_date, 'dd.mm.rr hh24:mi'));
-- Get Total cost
total_cost := nvl(hours_normal_rate,0) * nvl(working_hours,0);
end if;
END;
觸發器是,
create or replace
TRIGGER LABOUR_COST_BIU_TRI
BEFORE INSERT OR UPDATE ON LABOUR_COST
FOR EACH ROW
DECLARE
v_hours_normal NUMBER;
v_working_hours NUMBER;
v_total_cost NUMBER;
BEGIN
util.get_labour_cost_data(
p_employee_id => :NEW.EMPLOYEE_ID,
p_start_date => :NEW.START_DATE_TIME,
p_end_date => :NEW.END_DATE_TIME,
hours_normal_rate => v_hours_normal,
working_hours => v_working_hours,
total_cost => v_total_cost
);
select v_hours_normal, v_working_hours, v_total_cost into :NEW.HOURS_NOMAL, :NEW.HOURS_OT, :NEW.TOTAL_COST
from dual;
END;