Документация Oracle на русском языке





Сайт посвящен разработке информационных систем с использованием технологий Oracle. На сайте можно найти полезную литературу и документацию на русском языке по программированию и администрированию Oracle.Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации.

Главная :: Карта


Oracle Database или Oracle RDBMS — объектно-реляционная система управления базами данных компании Oracle.



 

DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Операторы и выражения CASE

Оператор CASE позволяет выбрать для исполнения одну из нескольких последовательностей операторов. Операторы CASE появились в стандарте SQL уже в 1992 году, но Oracle SQL стал поддерживать CASE только в версии Oracle8i Database, а PL/SQL не поддерживал CASE вплоть до версии Oracle9/ Database Release 1. Начиная с этой версии PL/SQL поддерживает следующие виды операторов CASE:
Простой оператор CASE
Ставит в соответствие каждой последовательности операторов PL/ SQL некоторое значение. Выбирает последовательность операторов для выполнения на основе вычисления выражения, возвращающего одно из таких значений.
Поисковый оператор CASE
Выбирает последовательность операторов для выполнения на основе вычисления списка логических условий. Выполняется последовательность операторов, соответствующая первому условию, вычисленному как TRUE.
В дополнение к операторам CASE PL/SQL поддерживает также выражения CASE. По форме выражение CASE очень похоже на оператор CASE. Оно позволяет выбрать из множества выражений то выражение, которое должно быть вычислено. Результатом выражения CASE является некоторое значение, в то время как результатом оператора CASE является исполнение последовательности операторов PL/SQL.
Простой оператор CASE
Простой оператор CASE позволяет на основе вычисления результатов некоторого выражения выбрать одну из нескольких последовательностей операторов PL/SQL для исполнения. Приведем пример простого оператора CASE, в котором для выбора нужного алгоритма вычисления бонуса используется анализ должности сотрудников (переменная employee type):

Рассмотренный оператор CASE содержит явное выражение ELSE, однако в общем случае оно не является обязательным. Если выражение ELSE явно не указано, то PL/SQL неявно использует такую конструкцию:

Поисковый оператор CASE
Поисковый оператор CASE вычисляет список логических выражений и, найдя выражение, равное TRUE, выполняет соответствующую ему последовательность операторов. Фактически поисковый оператор CASE эквивалентен оператору CASE TRUE из предыдущего раздела. Приведем пример поискового оператора CASE:

Циклы в PL/SQL
PL/SQL поддерживает три вида циклов, обеспечивая тем самым возможность создания оптимального кода для решения любой конкретной задачи. В большинстве случаев, требующих использования цикла, применима любая из циклических конструкций. Однако выбор не самой удачной для конкретного случая конструкции может повлечь за собой написание множества дополнительных строк кода. В итоге получившийся модуль будет сложнее для восприятия и дальнейшего сопровождения.
Чтобы показать, как разные виды циклов по-разному решают поставленную перед ними задачу, рассмотрим далее три типа циклов. В каждом случае процедура вызывает display_total_sales для каждого года, номер которого находится в диапазоне между начальным и конечным значением аргумента.
Очевидно, в рассмотренных примерах цикл FOR требует наименьшего объема кода. Но использование данного типа цикла возможно лишь потому, что заранее известно, что тело цикла будет выполняться определенное количество раз. Во множестве других случаев количество проходов цикла должно быть переменным, так что применение цикла FOR будет невозможно.
Простой цикл
Простой цикл называется простым, потому что он начинается просто со слова LOOP и заканчивается оператором END LOOP. Цикл завершается при выполнении внутри цикла оператора EXIT, EXIT WHEN или RETURN (или если внутри цикла инициировано исключение):
 



jAntivirus