д. На шаге Source выберите опцию SQL запрос (SQL Query) и вставьте данный запрос:
SELECT substr(e. last_name,1,1)||'. '|| e. first_name "Manager Name:",
c. country_name "Location:"
FROM departments d
left join employees e on d. manager_id = e. employee_id
left join locations l on d. location_id = l. location_id
left join countries c on l. country_id = c. country_id
left join employees e2 on d. department_id = e2.department_id
WHERE nvl(d. department_id,'-1') = nvl(:P2_DEPARTMENT_ID,'-1')
GROUP BY substr(e. last_name,1,1)||'. '||e. first_name,
c. country_name
В этом запросе:
· производится соединение пяти таблиц, при этом используется внутреннее соединение (ключевые слова inner join); условие соединения указывается после ключевого слова on;
· таблица EMPLOYEES используется 2 раза (для менеджера подразделения и для работников), поэтому указана дважды в предложении FROM, но с разными синонимами таблицы (e и e2);
· substr(e. last_name,1,1)||'. '|| e. first_name – вырезается первый символ из имени работника (менеджера) и соединяется с точкой и пробелом, а затем с фамилией работника (менеджера);
· условие, заданное в предложении WHERE, обеспечивает выборку только подразделения, имеющего заданный идентификатор (здесь - параметр:P2_DEPARTMENT_ID);
· в предложении GROUP BY перечислены столбцы, к которым не применена групповая функция.
е. Нажмите Next>.
4. На шаге Report Attributes измените Шаблон отчета (Report Template) –
default: vertical report. Нажмите Next>.
5. На шаге Conditional Display:
а. Тип условия (Condition Type) – Value of Item/Column in Expression 1!= Expression 2
Данный тип условия означает, что условие будет истинным, если значение первого выражения не будет равно значению второго выражения.
б. Expression 1 – введите P?_DEPARTMENT_ID
в. Expression 2 – введите -1
Заданное условие означает, что данный отчет будет отображаться только тогда, когда значение элемента P?_DEPARTMENT_ID не будет равно -1 (т. е., только если будет выбрано конкретное подразделение).
Нажмите Create Region.
6. Задайте для столбцов отчета русскоязычные названия:

Обратите внимание, что внизу только что созданного отчета О подразделении отображаются символы 1-1. Это означает, что для данного отчета включена разбивка на страницы. Однако в данном случае она бессмысленна, т. к. отображается всегда только одна запись (о выбранном подразделении).
Для отключения разбивки на страницы:
1. Откройте окно редактирования для страницы Работники.
2. Откройте окно редактирования атрибутов отчета О подразделении.
3. Во вкладке Report Attributes в секции Layout and Pagination в поле Pagination Scheme выберите - No Pagination Selected-.
4. Примените изменения и запустите страницу. Проверьте правильность работы отчета.
2. Редактирование отчета Подразделения
2.1. Создание формы для создания/редактирования подразделения
В созданном приложении нет возможности редактировать существующие записи о подразделениях и создавать новые. Для получения такой возможности создадим страницу с формой, подобную странице Создать/Редактировать Работника (должна быть создана только одна страница с формой, т. к. отчет уже существует):
1. На домашней странице своего приложения нажмите Create Page>.
2. Выберите опцию Form, затем на странице Create Page выберите опцию Form on a Table or View.
3. На шаге Table/View в поле Table/View Name выберите имя таблицы – Departments, нажмите Next>.
4. На шаге Page and Region:
· В полях Page Name, Region Title введите Создать/Редактировать Подразделение.
· В поле Breadcrump установите Breadcrump. Это установит на странице навигационную цепочку. Тогда в поле Entry Name введите название элемента навигационной цепочки – Создать/Редактировать Подразделение.
· В секции Parent Entry выберите Подразделения. Нажмите Next>.
5. На шаге Tabs установите опцию Use an existing tab set and reuse an existing tab within that tab set. В окне Tab Set оставьте (Главная), в окне Use Tab выберите Главная. Нажмите Next>.
6. На шаге Primary Key в опции Primary Key Type выберите Select Primary Key и в окне Primary Key Column 1 выберите Department_id. Нажмите Next>.
7. На том же шаге установите опцию Existing sequence и в поле Sequence в качестве источника значений для столбца первичного ключа (DEPARTMENT_ID) укажите последовательность (sequence) DEPARTMENTS_SEQ. Нажмите Next>.
8. На шаге Columns выберите все поля для отображения в форме и нажмите Next>.
9. На шаге Buttons установите все стандартные кнопки, которые должны быть на странице. Ярлыки для кнопок должны быть русскоязычными (Отменить, Создать, Применить, Удалить). Нажмите Next>.
10. На шаге Branching установите переход на страницу Подразделения после отправки страницы (Branch here on Submit) или отмены изменений (Branch here on Cancel). Нажмите Next>.
11. На шаге Confirm нажмите Create.
12. Доработайте созданную страницу Создать/Редактировать Подразделение так, чтобы названия полей отображались по-русски.
13. Модифицируйте форму, чтобы поле для указания менеджера подразделения представлялось как выпадающий список выбора, причем он должен отображать пустые значения в виде - нет менеджера-:
а. В разделе Page Rendering найдите секцию Items, подчиненную пункту Создать/Редактировать Подразделение.
б. Чтобы отредактировать визуальный элемент, отображающий менеджера (P?_MANAGER_ID):
· В секции Items щелкните по ссылке P?_MANAGER_ID. Отобразится страница редактирования элемента.
· В секции Identification выберите Select List в поле Display As.
· В секции Label измените значение в поле Label на Менеджер.
· В секции List of Values:
o В поле Named LOV выберите EMPLOYEES.
o Display Null Value выберите значение Yes.
o Null Display Value введите - нет менеджера-.
o Null Return Value введите -1. Ввод значений, которые подставляются вместо неопределенного значения (Null Value), позволяет облегчить написание запросов (облегчает проверку на Null). В этом случае, когда пользователь выбирает в списке - нет менеджера-, в элементе устанавливается значение -1, и Вы можете использовать это значение в запросе.
· Примените изменения.
Для решения аналогичной задачи для поля Расположение необходимо вначале создать список значений, а затем создать собственно список выбора (дополнительно: если расположение не указано, надо отобразить текст - не указано расположение-).
2.2. Создание списка LOCATIONS
Так как понятие «расположение» является сложным и включает в себя страну, город, адрес и т. д., то рассмотренная ранее технология создания списка не подходит.
Поскольку ключевым моментом при создании списка значений является определение SQL-запроса, возвращающего множество пар (отображаемое значение, возвращаемое значение), для решения задачи сначала необходимо подготовить соответствующий запрос. Воспользуемся для этого построителем запросов:
1. Откройте страницу построителя запросов (SQL Workshop> Utilities> Query Builder). Для удобства работы это можно сделать в отдельной вкладке или окне браузера.
2. В списке в левой части построителя отображаются таблицы, содержащиеся в Вашей схеме. Щелкните по таблицам LOCATIONS и COUNTRIES. Изображения таблиц появятся в центральной части построителя.
3. Из этих таблиц потребуются столбцы COUNTRY_NAME, CITY, STREET_ADDRESS и LOCATION_ID. Выберите их, установив флажки слева от названий столбцов.
4. Чтобы для каждого расположения выводилась соответствующая страна, эти таблицы необходимо соединить условием LOCATIONS. COUNTRY_ID = COUNTRIES. COUNTRY_ID. Соедините таблицы, щелкнув по незаполненным клеткам справа от соответствующих названий столбцов:

Обратите внимание на текст SQL-запроса, который автоматически сформировался во вкладке SQL в нижней части построителя. Возможности построителя запросов очень ограничены, однако его можно использовать для формирования черновых заготовок запросов.
Переключившись на вкладку Results (или нажав кнопку Run), Вы увидите результат выполненного запроса:

Полученный запрос еще не пригоден для использования при построении списка значений. Необходимо доработать его так, чтобы компоненты расположения (страна, город и адрес) выводились в одном столбце.
5. Сохраните полученный запрос под именем, например, lab5_pre_locations. Для этого нажмите кнопку Save в верхней части построителя. Переключившись затем на вкладку Saved SQL, Вы увидите сохраненный запрос.
6. Откройте страницу SQL Workshop>SQL Commands. Переключитесь на вкладку Saved SQL и щелкните по ссылке lab5_pre_locations. Откроется сохраненный Вами запрос, который теперь можно доработать и проверить.
7. Объедините в тексте запроса столбцы COUNTRIES. COUNTRY_NAME, LOCATIONS. CITY и LOCATIONS. STREET_ADDRESS строковыми операторами || (две вертикальные черты), удаляя автоматически сформированные в построителе запросов синонимы и добавляя между столбцами строковые константы ', ' (запятая и пробел в одинарных кавычках), как показано на рисунке ниже:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 |


