The program is to create a package count the no. of leaves taken by an employee according to location of org. Eg :- If company XYZ is a company which is located in many locations.Each location has its own set of rules... in some locations saturday is working and in some both saturday and sunday are considered to be holidays. i have made the package as follows but i think it can be made easier.
Create or replace package Body
Leave_location
Procedure Leave_location_proc(Person_id number,
Start_date Date
)
as
k Number;
count_weekend number;
Cursor c_var
is
select pt.person_id,
lt.end_date-lt.start_date Number_of_leaves_excluding_the_end_date,
lt.Start_date //Start leave date,
lt.Saturday // 1 if saturday is not working, null if working
lt.Sunday ,
loc.location_id
from person_table pt,
leave_table lt
and leave_table.person_id=person_table.person_id
and loc.location_id=pt.person_id \\filtering the location for the particular employee;
Begin
Count_weekend :=0;
for cursor_var in c_var
k :=cursor_var.Number_of_leaves_excluding_the_end_date+1
loop
for i in..k
loop
if(to_char(cursor_var.start_date,'DY') in ('Sat','Sun')
Then
if(cursor_var.Saturday is not null and cursor_var.sunday is not null))
Then
Count_weekend :=2;
Else
count_weekend :=1;
end if ;
end if;
cursor_var.Start_date :=cursor_var.Start_date+1;
No_of_leaves :=K-Count_weekends;
Count_weekends:=Count_weekends+1;
end loop;
end loop;
End Leave_location;
Leave_location_proc;
This code doesnt seem to be efficient. Any more better methods