Генерация динамического предиката

Приведенный на рисунке пример создает инструкцию SELECT, возвращающую данные обо всех сотрудниках подразделения, нанятых на работу в конкретный день.

Генерация динамического предиката

Этот сценарий динамически создает предикат - предложение WHERE.

Примечание 1. После задания пользовательской переменной для ее удаления необходимо использовать команду UNDEFINE.

Первая инструкция SELECT предлагает ввести номер подразделения. Если ни один номер подразделения не введен, функция DECODE рассматривает номер подразделения как неопределенный (NULL), и пользователю предлагается ввести дату приема на работу.

Если дата приема на работу не введена, функция DECODE рассматривает дату приема на работу как неопределенную. Создаваемое динамически предложение WHERE также оказывается неопределенным, что инициирует возвращение второй инструкцией SELECT всех строк из таблицы EMPLOYEES.

Примечание 2. Переменная NEW_V[ALUE] определяет переменную для хранения значения столбца.

Сослаться на переменную можно в командах TTITLE. Используйте переменную NEW_VALUE, чтобы вывести значения столбца или дату в верхнем заголовке. Необходимо включить этот столбец в команду BREAK при выполнении действия SKIP PAGE. Имя переменной не может содержать знак #.

Переменная NEW_VALUE полезна для основных/подробных отчетов, в которых для каждой страницы создается новая главная запись.

   IF (<<номер_подразделения>> не введен) THEN
    IF (<<дата_приема>> не введена) THEN
        вернуть пустую строку
    ELSE
        вернуть строку ‘WHERE hire_date =
TO_DATE('<<дата_приема>>', 'DD-MON-YYYY')’
ELSE
    IF (<<дата_приема>> не введена) THEN
        вернуть строку ‘WHERE department_id = введенный
<<номер_подразделения>>'
    ELSE
        вернуть строку ‘WHERE department_id = введенный
<<номер_подразделения>>
            AND hire_date =
TO_DATE(' <<дата_приема>>', 'DD-MON-YYYY')’
END IF

Возвращаемой строкой становится значение переменной DYN_WHERE_CLAUSE, которая будет использоваться во второй инструкции SELECT.

Примечание. Используйте для этих примеров SQL*Plus.

После выполнения первого примера, приведенного на слайде, пользователю будет предложено ввести значения DEPTNO и HIREDATE:

Создается следующее значение для MY_COL:

При выполнении второго примера данного слайда будет получен следующий результат:

Далее: Использование таблицы SQL

Статьи по теме
Комментарии
Написать

(обязательно)

(обязательно)

Это не спам (обязательно)