Более сложный вариант оператора DECODE:
DeCODE(выражение, значение1, значение если выражение= значение1,
— Значение2, значение если выражение= значение2,
— Значениеn, значение если выражение= значениеn,
— Значение если выражение! = значение) FROM TABLE;
Пример 1
Рисунок 154. Запрос: использование оператора DECODE
Пример 1
Пример 2
Рисунок 155. Запрос: использование оператора CASE
Еще один вариант CASE:
Пример
Если в операторе CASE нет предложения ELSE, тогда оператор CASE вернет NULL.
— результат NULL.
Если в операторе CASE несколько одинаковых сравнений, то правильным будет результат последнего из них.
Существуют ли подобные операторы в других базах данных, например в MS SQL или PostgreSQL?
Это также оператор CASE с аналогичным синтаксисом и назначением.
Как сравнивать интервалы с помощью DECODE? Например, 1—10 — ответ 1, 20—30 — ответ 2, 30—40 — ответ 3.
Вот пример такого сравнения, здесь речь идет об интервале каталогов:
Контрольные вопросы и задания для самостоятельного выполнения
1. Повторите материалы данного шага.
2. Из таблицы AUTO выберите сведения о цвете автомобиля, марке автомобиля, если номер автомобиля начинается с цифры 1 — выведите в отдельной колонке «регион 1», с цифры 2 — «регион 2», с цифры 3 — «регион 3». Используйте DECODE.
3. Сделайте предыдущее задание с использованием CASE.
Шаг 58. Временные таблицы. Когда лучше применять
Временные таблицы в SQL выполняют разные функции, например разумно применять временные таблицы, когда необходимо сохранить предварительный результат некоторого сложного расчета, подвести предварительные итоги по списку операций или подготовить данные для отчета перед отправкой на печать.
Временные таблицы существуют в ORACLE начиная с версии 8.
Они предназначаются для хранения данных на протяжении сеанса или транзакции.
Временная таблица поддерживает использование индексов и ограничений.
Временные таблицы (GLOBAL TEMPORARY), в отличие от таблиц регулярных, целесообразно использовать в тех случаях, когда сохраняемые данные часто изменяются и непостоянны.
Данные во временной таблице будут видны только в той сессии или транзакции, которая поместила эти данные в таблицу.
После создания временной таблицы ее описание сохраняется в словаре данных ORACLE.
Место в сегменте под данные выделяется динамически, в момент выполнения первой команды DML (SELECT, INSERT, UPDATE) для этой временной таблицы.
Временная таблица описывается таким же образом, что и обычная регулярная таблица, и все данные такой таблицы подразделяются:
• на данные, используемые только в данной сессии,
• или же данные, используемые только в данной транзакции.
Специфику поведения данных относительно сессии определяют ключевые слова ОN COMMIT DELETE и ОN COMMIT PRESERVE в команде CREATE TABLE.
• ОN COMMIT DELETE ROWS используется во временных таблицах, данные которой существуют в пределах одной транзакции;
• ОN COMMIT PRESERVE ROWS используется во временных таблицах, данные которой существуют в пределах одной сессии.
СУБД ORACLE удаляет все строки из временной таблицы — очищает таблицу после завершения сессии или транзакции.
Данный пример демонстрирует создание временной таблицы, данные которой относятся к сессии.
Пример создания временной таблицы с использованием запроса:
Демонстрация отличия временной таблицы от таблицы регулярной.
Создаем две таблицы
• временную
Не будем нагружать скрипты излишним синтаксисом.
Выполняем запрос к временной таблице:
Закрываем сессию, соединяемся с базой снова. Выполняем запрос к регулярной таблице.
К временной таблице:
Итак, данные во временной таблице сохраняются только в текущей сессии или транзакции в зависимости от выражения ON COMMIT в скрипте создания таблицы.
Отличие ОN COMMIT PRESERVE ROWS от ОN COMMIT DELETE ROWS
Создаем две таблицы ON COMMIT PRESERVE ROWS.
Добавляем данные в созданные таблицы.
Читать дальше
Конец ознакомительного отрывка
Купить книгу