Вы находитесь на странице: 1из 4

create table funtom_department

(
dept_ID number(3) constraint funt_dep_PK primary key,
dept_name varchar2(50) NOT NULL
)

create table funtom_grade


(
grade_ID number(3) contraint funt_grd_PK primary key,
grade_rate number(5,2) NOT NULL,
grade_hours number(2)
)

create table funtom_activity


(
activity_ID number(3) constraint funt_act_PK primary key,
activity_rate number(5,2)
)

create table funtom_employee


(
emp_ID number(3) constraint funt_emp_PK primary key,
emp_fistname varchar2(50) NOT NULL,
emp_surname varchar2(50),
emp_department number(2) constraint emp_fk_dep references funtom_department,
emp_street varchar2(50),
emp_town varchar2(50),
emp_district varchar2(50),
emp_grade default 4 check(emp_grade between 1 and 9),
constraint emp_fk_grd references funtom_grade,
emp_site varchar2(30) default 'LONDON'
)

ALTER table funtom_employee


add employee_status varchar2(10)
;

Alter table funtom_employee


add employee_start date
;

alter table funtom_employee


add employee_termination date check(employee_termination > employee_start)
;

create table funtom_timesheet


(
timesheet_ID number(3) constraint fun_tim_PK primary key,
timesheet_emp number(3) NOT NULL constraint tim_fk_emp references
funtom_employee,
timesheet_wc date NOT NULL,
timesheet_hours number(2),
timesheet_OT number(2) Default 0,
timesheet_approved number(3) check(timesheet_approved == timesheet_emp),
constraint tim_fk_emp1 references funtom_employee
);

create table funtom_customer


(
customer_ID number(3) constraint funt_cust_PK primary key,
customer_name varchar2(50) NOT NULL,
customer_contact varchar2(50),
customer_acmanager number(3) constaint cust_fk_emp references funtom_employee,
customer_addr1 varchar2(50),
customer_addr2 varchar2(50),
customer_addr3 varchar2(50),
customer_addrpc varchar2(10)
)

create table funtom_consultancy


(
consultancy_ID number(3) constraint funt_cons_PK primary key,
consultancy_emp number(3) constraint cons_fk_emp references funtom_employee,
consultancy_hours number(4,2) check(consultancy_hours > 1),
consultancy_client number(3) constraint cons_fk_cust references funtom_customer,
consultancy_date date,
consultancy_activity number(3) constraint cons_fk_act references funtom_activity
)

create table funtom_payroll


(
payroll_id number(3) constraint funt_pay_PK primary key,
payroll_emp number(3) constraint pay_fk_emp references funtom_employee,
payroll_standard number(8,2),
payroll_overtime number(8,2),
payroll_pension number(8,2),
payroll_timesheet number(3) constraint pay_fk_tim references funtom_timesheet,
payroll_date date
);

VIEWS

OK
2. create view 90_day_report as
select emp_firstname||' '||emp_surname||' has worked '||timesheet_hours||'
hours'||', '||timesheet_OT||' were overtime, in the last 90 days' as "90 Day
report"
from funtom_employee left join funtom_timesheet on emp_ID = timesheet_approved
where (timesheet_wc > sysdate-90)
group by emp_firstname, emp_surname, timesheet_hours, timesheet_OT
;

3. create view timesheet as


select timesheet_ID, timesheet_wc||''||timesheet_approved as "TIMESHEET",
emp_firstname||' '||emp_surname as "EMPLOYEE"
from funtom_employee join funtom_timesheet on emp_ID = timesheet_emp
where(timesheet_wc < sysdate-14 and timesheet_approved=NULL)
group by timesheet_ID, timesheet_wc,timesheet_approved,emp_firstname,
emp_surname
;

4. create view question4 as


select emp_firstname||' '||emp_surname|| 'was contracted for '||
sum(timesheet_hours) ||', earned �'||sum(payroll_standard)|| 'and �'||
sum(payroll_overtime)||'in OT.'||'Total earnings were �'||(sum(payroll_standard)
+sum(payroll_overtime))||' Pension paid was �'|| sum(payroll_pension) as "END OF
YEAR REPORT"
from funtom_employee join funtom_timesheet on emp_id=timesheet_approved
join funtom_payroll on timesheet_approved =
payroll_timesheet
where payroll_date between '1 April 2014' and sysdate
group by emp_firstname, emp_surname
;

1.
create view Consultancy_report as
select 'Employee '||emp_firstname||' '||emp_surname||' worked '||
sum(consultancy_hours)||' hours for ' ||customer_name||' charagable '||
sum(activity_rate*consultancy_hours) as"14 day consultancy report"
from funtom_employee join funtom_consultancy on consultancy_emp=emp_ID
join funtom_customer on consultancy_client = customer_id
join funtom_activity on consultancy_activity=activity_id
where(consultancy_date > sysdate-15)
group by emp_firstname,emp_surname,consultancy_hours,customer_name,activity_rate
;

Triggerss

1.

create or replace trigger first


before insert on funtom_timesheet
for each row
declare v_id number(3);
Begin
select max(timesheet_id) +1 into v_id from funtom_timesheet;
:new.timesheet_id:=v_id;
end;
/

2.

create trigger second


before insert on funtom_timesheet
for each row
declare contracted_hours number(2);
worked_hours number(2);
begin
select (grade_hours) into contracted_hours
from funtom_employee join funtom_grade on emp_grade=grade_ID;
if(:new.timesheet_hours > contracted_hours) then
:new.timesheet_ot := :new.timesheet_hours - contracted_hours;
:new.timesheet_hours := :new.timesheet_hours - :new.timesheet_ot;
end if;
end;
/

3.

create trigger third


after update of timesheet_approved
on funtom_timesheet
for each row
declare p_id number(3);
rate number(5,2);
begin
select (grade_rate) into rate from funtom_employee join funtom_grade on
emp_grade=grade_id;
insert into funtom_payroll
(
payroll_emp,
payroll_standard,
payroll_overtime,
payroll_pension,
payroll_timesheet,
payroll_date)
values
(
:new.timesheet_emp,
:new.timesheet_hours*rate,
:new.timesheet_ot*(rate*1.5),
(:new.timesheet_hours*rate*10)/100,
:new.timesheet_approved,
sysdate());
end;
/

create or replace trigger forth


before insert on funtom_payroll
for each row
declare v_id number(3);
Begin
select max(payroll_id) +1 into v_id from funtom_payroll;
:new.payroll_id:=v_id;
end;
/

Вам также может понравиться