Упражнения на курсорах PL / SQL: распечатайте отчет, в котором будет показано: идентификатор сотрудника, имя, дата найма и размер вознаграждения, который они получили в соответствии с опытом работы
Курсор PL / SQL: Упражнение 47 с решением
Напишите блок в PL / SQL, чтобы напечатать отчет, в котором будет указан идентификатор сотрудника, имя, дата найма и сумма поощрения, которую они получили в соответствии с опытом работы, присоединившимся к месяцу текущей даты.
Пример решения:
Код PL / SQL:
DECLARE
emp_id employees.employee_id%TYPE;
emp_hiredate employees.hire_date%TYPE;
emp_firstname employees.first_name%TYPE;
emp_lastname employees.last_name%TYPE;
no_of_emp NUMBER;
inctv_amount NUMBER;
work_exp NUMBER;
CURSOR emp_cur (
thismonth NUMBER)IS
SELECT employee_id,
first_name,
last_name,
hire_date
FROM employees
WHERE Extract(month FROM hire_date) = thismonth;
BEGIN
OPEN emp_cur(Extract(month FROM SYSDATE));
dbms_output.Put_line('Date: '
|| To_char(SYSDATE, 'DL'));
dbms_output.Put_line('Employees with yearly incentive amounts:');
dbms_output.Put_line('------------------------------------------');
dbms_output.Put_line(Rpad('Employee ID', 15)
|| Rpad('Name of the Employee', 30)
|| Rpad('Hire Date', 15)
|| 'Incentive Amount');
dbms_output.Put_line('------------------------------------------------------------------------------');
LOOP
FETCH emp_cur INTO emp_id, emp_firstname, emp_lastname, emp_hiredate;
EXIT WHEN emp_cur%NOTFOUND;
work_exp := Round(( Months_between(SYSDATE, emp_hiredate) / 12 ));
IF work_exp > 13 THEN
inctv_amount := 8000;
ELSIF work_exp > 11 THEN
inctv_amount := 5000;
ELSIF work_exp > 9 THEN
inctv_amount := 3000;
ELSIF work_exp > 7 THEN
inctv_amount := 2000;
ELSIF work_exp > 4 THEN
inctv_amount := 1000;
ELSIF work_exp > 0 THEN
inctv_amount := 400;
END IF;
dbms_output.Put_line(Rpad(emp_id, 15)
||Rpad(( emp_firstname
||' '
||emp_lastname ), 30)
||Rpad(emp_hiredate, 15)
|| To_char(inctv_amount, '9,999'));
END LOOP;
no_of_emp := emp_cur%rowcount;
dbms_output.Put_line('The number of rows fetched is '
|| no_of_emp);
CLOSE emp_cur;
END;
/
Пример вывода:
SQL> / Дата: суббота, 26 мая 2018 г. Сотрудники с ежегодными поощрительными суммами: ------------------------------------------ Идентификатор сотрудника Имя сотрудника Дата найма Сумма поощрения -------------------------------------------------- --------------------------- 104 Брюс Эрнст 21 мая 2007 г. 3000 115 Александр Ху 18 мая 2003 года 8 000 122 Пайам Кауфлинг 01 мая-03 8,000 174 Эллен Абель 11 мая-04 8,000 178 Кимберлийских Грантов 24-МАЯ-07 3000 197 Кевин Фини 23 мая 2006 года 5000 Количество выбранных строк равно 6 Процедура PL / SQL успешно завершена.
Блок - схема:
Улучшите этот пример решения и опубликуйте свой код через Disqus
Предыдущий: Напишите блок в PL / SQL, чтобы отобразить первый отдел с более чем пятью сотрудниками.
Далее: Написать блок в PL / SQL, чтобы показать, как записи объявляются и инициализируются.
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования
disqus2code