- •Федеральное государственное бюджетное образовательное учреждение
- •Введение
- •Лабораторная работа №1. СтруктураApeXи начало работы
- •Лабораторная работа №2. Создание базы данных
- •Лабораторная работа №3. Создание исходного приложения
- •2. Связывание разных таблиц в одном отчете
- •4. Выполнение расчетов в отчете
- •4.1. Вычисление зарплаты работника
- •4.2. Добавление столбца с годовой зарплатой
- •4.3. Восстановление иконки редактирования
- •4.4. Русификация заголовков и форматирование полей
- •Лабораторная работа № 4. Создание связей между приложениями
- •Лабораторная работа № 5. Редактирование приложений
- •4. Соединение страниц Подразделения и Создать/Редактировать Подразделение
- •Лабораторная работа № 6. Доработка пользовательского интерфейса
- •Лабораторная работа № 7. Создание табличных форм, параметризованных отчетов и форм «Главная/Детальная»
- •Лабораторная работа № 8. Создание и использование кнопок-флажков (check box)
- •Лабораторная работа № 9. Самостоятельное создание приложения для выбранной предметной области
- •Приложение
4. Выполнение расчетов в отчете
Далее выполним модификацию отчета о работниках:
создадим PL/SQL функцию, которая вычисляет зарплату работника;
добавим столбец «Зарплата/Год» для отображения результатов этих вычислений в отчете о работниках,
восстановим в столбце иконку редактирования и ссылку на страницу Создать/Редактировать Работника,
назначим всем столбцам русскоязычные заголовки и изменим формат вывода числовых столбцов.
4.1. Вычисление зарплаты работника
Перейдите на домашнюю страницу приложения и щелкните по иконке SQL Workshop, а затем SQL Commands. Появится окно, в котором Вы можете запускать SQL и PL/SQL код в БД.
Введите следующий скрипт:
CREATE OR REPLACE FUNCTION calc_remuneration(
salary IN number, commission_pct IN number) RETURN NUMBER IS
BEGIN
RETURN ((salary*12) + (salary * 12 * nvl(commission_pct,0)));
END;
/
Этот PL/SQL код создает функцию calc_remuneration, принимающую входные (IN) числовые (number) параметры salary (размер месячного оклада) и commission_pct (комиссионный процент) и возвращающую число. Функция вычисляет размер годового вознаграждения работника с учетом процентов.
Обратите внимание на функцию nvl, которая проверяет значение первого параметра на null и в случае, если первый параметр равен null, возвращает значение второго параметра. Это важно в данном случае, т.к. результатом любых арифметических операций со значением null является null. А в данном случае, используя nvl, мы интерпретируем неопределенное значение комиссионного процента (отсутствие комиссионного процента у работника) как значение = 0.
Щелкните по кнопке Run. В окне Results отобразится сообщение «Function created.»
4.2. Добавление столбца с годовой зарплатой
Откройте страницу Page Rendering для страницы Работники:
В секции Regions щелкните по ссылке Работники. Появится раздел Region Definition.
В секции Source проанализируйте имеющийся там автоматически сгенерированный код:
select "EMPLOYEE_ID",
"FIRST_NAME",
"LAST_NAME",
"HIRE_DATE",
"SALARY",
"COMMISSION_PCT"
from "#OWNER#"."EMPLOYEES"
Обратите внимание на следующие моменты:
В запрос включены столбцы, выбранные при создании отчета с помощью мастера.
#OWNER# – подстановочная строка (substitution string), представляющая имя схемы, с которой ассоциировано приложение и в которой содержатся необходимые таблицы.
Замените код запроса на следующий:
SELECT "EMPLOYEE_ID" "Emp_Id",
"FIRST_NAME",
"LAST_NAME",
"HIRE_DATE",
"SALARY",
"COMMISSION_PCT",
calc_remuneration(salary,commission_pct) "Зарплата/год"
FROM "#OWNER#"."EMPLOYEES"
Обратите внимание на следующие моменты:
В запрос добавился вызов созданной ранее функции calc_remuneration, которой передаются значения столбцов SALARY и COMMISSION_PCT.
Для столбца EMPLOYEE_ID и столбца с функцией calc_remuneration установлены синонимы, соответственно, «Emp_Id» и «Зарплата/год» .
Щелкните Apply Changes.
Чтобы просмотреть новую страницу отчета Работники, щелкните иконку Run в правом верхнем углу:
Обратите внимание на следующие моменты:
Появился новый столбец Зарплата/год.
Пропала иконка со ссылкой на страницу Создать/Редактировать Работника. Это произошло потому, что изменилось название столбца, с которым была ассоциирована ссылка на страницу редактирования записи о работнике (мы установили синоним Emp_Id для столбца EMPLOYEE_ID).
Столбцы отчета имеют англоязычные названия (кроме Зарплата/Год, которому мы установили русскоязычный синоним в запросе).
Столбец со значением идентификатора работника отображается предпоследним в отчете.