1
私はSQLにかなり新しいだと私はCOMPANY_TIMESHEET
に時間からCOMPANY_GRADE
テーブルに収縮時間(GRADE_HOURS
)を減算することにより、所定外労働を計算するためのトリガ働いていた(TIMESHEET_HOURS
)を作成しようとしています表。これは、行がCOMPANY_TIMESHEET
テーブルに挿入されるたびに、COMPANY_TIMESHEET
テーブルのTIMESHEET_OT
カラムに入ります。次のように関係計算残業使用して行が
テーブルは以下のとおりです。
CREATE TABLE COMPANY_TIMESHEET
(
timesheet_ID number(3) constraint timesheet_pk primary key,
Timesheet_emp number(3) constraint timesheet_empnotnull not null references company_employee,
Timesheet_wc date constraint timesheet_wcnotnull not null,
Timesheet_hours number(2),
Timesheet_OT number(2) default 0,
Timesheet_approved number(3) references company_employee
);
CREATE TABLE COMPANY_GRADE
(
grade_ID number(3) constraint grade_pk primary key,
Grade_rate number(5,2) constraint grade_ratenotnull not null,
Grade_hours number(2)
) ;
CREATE TABLE COMPANY_EMPLOYEE
(
emp_ID number(3) constraint emp_pk primary key,
Emp_firstname varchar2(50) constraint emp_firstnamenotnull not null,
Emp_surname varchar2(50),
Emp_department number(2) constraint employeeFKdepartment references company_department,
emp_street varchar2(50),
emp_town varchar2(50),
emp_district varchar2(50),
Emp_grade number(3) default 4 constraint checkempgrade check (Emp_grade between 1 and 9) references company_grade,
Emp_site varchar2(30) default 'LONDON'
);
私はエラーが発生した後、エラーによって満たされるようになりました多くの時間のためにしようとしているとして、私は任意の助けをいただければ幸いです。
私はその後、別の変数から減算する変数に契約時間を試してみて、合格するために開始ブロックとして本の多数のバリエーションを試してみました:
CREATE OR REPLACE TRIGGER trg_ot
BEFORE INSERT ON company_timesheet
FOR EACH ROW
DECLARE t_contracted NUMBER;
BEGIN
SELECT grade_hours INTO t_contracted
FROM company_grade
WHERE company_employee.emp_id = :new.timesheet_emp;
END;
/
あなたの質問はMyQLとSQL Serverをタグ付けされています。しかし、これらの2つのデータベースのどちらよりも、コードはOracleによく似ています。私はデータベース固有のタグを削除しています。使用している実際のデータベースに質問にタグを付けてください。 –