Когда протокол таблицы утвержден (Timesheet_approved * is Not Null), срабатывает триггер, который рассчитает оплату стандартных часов (Payroll_standard *) и оплату за каждую сверхурочную работу (Payroll_overtime * = стандартные часы X 1.5) за предыдущую неделю в таблице Payroll.Расчеты с использованием триггеров
Необходимо также рассчитать пенсионный взнос (Payroll_pension * = 10% от стандартного + С течением времени) из-за, а затем обновить таблицу расчета заработной платы (разработка, что следующий фонд заработной платы идентификатор будет)
Пожалуйста, обратите внимание * используется указать имена атрибутов таблицы. Таблицы, используемые/затронутые, являются funtom_Timesheet и funtom_Payroll
До сих пор у меня есть код ниже. Тем не менее, я продолжаю получать ошибки вокруг плохой переменной привязки:
LINE/COL ERROR
-------- -------------------------------------------------------------
32/3 PL/SQL: SQL Statement ignored
33/3 PL/SQL: ORA-01747: invalid user.table.column, table.column, or column specification
33/3 PLS-00049: bad bind variable 'NEW.PAYROLL_STANDARD'
34/3 PLS-00049: bad bind variable 'NEW.PAYROLL_OVERTIME'
35/3 PLS-00049: bad bind variable 'NEW.PAYROLL_PENSION'
41/1 PLS-00049: bad bind variable 'NEW.PAYROLL_ID'
SQL>
Это код Trigger
CREATE OR REPLACE TRIGGER trg_PAYROLLCALC
After UPDATE
on funtom_Timesheet FOR EACH ROW
Declare
V_TimesheetHRS number;
V_GRADEHRS number;
V_TimesheetOT number;
v_OTGRADEHRS number;
v_payrollID number;
BEGIN
SELECT Grade_rate into V_GRADEHRS
FROM Grade join Employee on (Emp_grade = grade_id)
where emp_ID = Timesheet_emp
;
SELECT Timesheet_hours into V_TimesheetHRS
From Funtom_timesheet join Funtom_employee on (emp_ID = Timesheet_emp)
where emp_ID = Timesheet_emp
;
Select Timesheet_OT into V_TimesheetOT
From Timesheet join Employee on (emp_ID = Timesheet_emp)
where emp_ID = Timesheet_emp
;
select Sum(Grade_rate * 1.5) into v_OTGRADEHRS
from Grade join Employee on (Emp_grade = grade_id)
where emp_ID = Timesheet_emp
;
IF Timesheet_approved IS NOT NULL then
Update funtom_Payroll set
:new.Payroll_standard := V_GRADEHRS * V_TimesheetHRS;
:new.Payroll_overtime := v_OTGRADEHRS * V_TimesheetOT;
:new.Payroll_pension := ((V_GRADEHRS * V_TimesheetHRS)+(v_OTGRADEHRS * V_TimesheetOT));
END IF;
Select MAX(Payroll_id)+1 into v_payrollID
from Payroll;
:new.Payroll_id := v_payrollID;
END;
/
Здравствуйте! Перейдите на страницу http://stackoverflow.com/help/how-to-ask, чтобы узнать, как задать вопрос. –
Пожалуйста, разместите структуру таблицы – anudeepks
И не пишите о * Табличном расписании * сущности (и т. Д.), Не объясняя, какие данные вы фактически говорите. –