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

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

14-9-2781115

Этот сценарий динамически создает предикат — предложение 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:

14-9-2-7297181

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

14-9-3-3422221

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

14-9-4-2836456

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

Похожие записи