Само задание:
1.Создать 3 таблицы (emp_10, emp_20, emp_30) в собственной схеме в которой будут храниться данные о сотрудниках их непосредственных менеджерах и их заработной плате .
2. Написать процедуру, которая будет в созданную таблицу вносить из таблицы DEMO.EMP следующие данные:
а)ID_сотрудников;
б) имена сотрудников;
б) имена их непосредственных начальников;
в) заработную плату сотрудников (если сотрудник проработал больше чем 10 лет новая зарплата должна увеличиваться на 7%,если больше 20 на 15%);
г) всех сотрудников 10 от поместить в таблицу emp_10,
всех сотрудников 20 от поместить в таблицу emp_20,
всех сотрудников 30 от поместить в таблицу emp_30,
Предусмотреть обработку исключительной ситуации NO_DATA_FOUND.
Вот код ребята я постараюсь его прокомментировать, что б было легче воспринять
create or replace procedure vlad5 is
a1 demo.employee%rowtype; -- Создали наши переменные
a2 demo.employee%rowtype;
a3 demo.employee%rowtype;
str demo.employee%rowtype;
str1 demo.employee%rowtype;
str2 demo.employee%rowtype; -- Создали наши переменные
-- Создаю курсор для записи в него сотрудников 10 отдела и 20 и 30
cursor p4 is select department_id D, first_name from demo.employee where department_id=10;
cursor p3 is select department_id D1, first_name from demo.employee where department_id=20;
cursor p2 is select department_id D2, first_name from demo.employee where department_id=30;
-- Создаю курсор для записи в него айди сотрудника, имя сотрудника, менеджера, зарплаты
cursor p1 is select employee_id, first_name, last_name, salary a from demo.employee;
begin
for a1 in p1 loop -- Создаю курсорный цикл для записи в таблицы emp_10,20,30 то есть если сотруд. и менеджера проработал больше 10 лет то я вписываю его данные и увеличиваю зарплату
if months_between(sysdate,demo.employee.hire_date)/12>=10
then insert into emp_10(first_name, last_name,salary) values (a1.first_name, a1.last_name, a1.a*1.07);
else if months_between(sysdate,demo.employee.hire_date)/12>=20
then insert into emp_10(first_name, last_name,salary) values (a1.first_name, a1.last_name, a1.a*1.15);
else dbms_output.put_line('Error');
end if;
end loop;
for a2 in p1 loop -- Создаю курсорный цикл для записи в таблицы emp_10,20,30 то есть если сотруд. и менеджера проработал больше 10 лет то я вписываю его данные и увеличиваю зарплату
if months_between(sysdate,demo.employee.hire_date)/12>=10
then insert into emp_20(first_name, last_name,salary) values (a1.first_name, a1.last_name, a1.a*1.07);
else if months_between(sysdate,demo.employee.hire_date)/12>=20
then insert into emp_20(first_name, last_name,salary) values (a1.first_name, a1.last_name, a1.a*1.15);
else dbms_output.put_line('Error');
end if;
end loop;
for a3 in p1 loop -- Создаю курсорный цикл для записи в таблицы emp_10,20,30 то есть если сотруд. и менеджера проработал больше 10 лет то я вписываю его данные и увеличиваю зарплату
if months_between(sysdate,demo.employee.hire_date)/12>=10
then insert into emp_30(first_name, last_name,salary) values (a1.first_name, a1.last_name, a1.a*1.07);
else if months_between(sysdate,demo.employee.hire_date)/12>=20
then insert into emp_30(first_name, last_name,salary) values (a1.first_name, a1.last_name, a1.a*1.15);
else dbms_output.put_line('Error');
end if;
end loop;
for str in p4 loop -- Создаю курсорный цикл для записи в таблицы emp_10,20,30 имена сотрудников 10.20.30 отделов
insert into emp_10 (department_id,first_name) values (str.D, str.first_name);
end loop;
for str1 in p3 loop
insert into emp_20 (department_id,first_name) values (str1.D1, str.first_name);
end loop;
for str2 in p2 loop
insert into emp_30 (department_id,first_name) values (str2.D2, str.first_name);
end loop;
exception
when NO_DATA_FOUND then raise_application_error('Error');
end vlad5;
З,Ы, При компиляции мне сейчас выдается ошибка что мол проблема с циклами (в которых оператор if), не понимаю почему?
И вообще кто что может сказать посоветовать, сложная работа конечно...