
- •Конспект лекций
- •1.4. Стандартные процедуры и функции
- •1.5. Процедуры вывода
- •1.6. Таблицы учебной база данных
- •2. Простые типы данных
- •2.1. Числовые типы
- •2.2. Символьные типы данных
- •2.3. Тип данных даты-времени
- •2.4. Преобразование типов
- •2.5. Порядок вычисления выражений
- •3. Типы команд языка sql
- •3.1. Команды обработки данных
- •3.1.1. Извлечение данных с помощью запросов
- •3.1.2. Вставка, обновление и удаление строк в таблицах
- •3.2. Управление транзакциями
- •3.2.1. Подтверждение транзакций
- •3.2.2. Откат транзакций
- •3.3. Команды определения данных
- •3.3.1. Таблицы
- •3.3.2. Последовательности
- •3.3.3. Представления
- •3.3.4. Синонимы
- •3.4. Команды управления данными
- •4. Управление привилегиями
- •4.1. Понятие привилегии
- •4.2. Типы привилегий
- •4.3. Системные привилегии
- •4.4. Объектные привилегии
- •4.5. Роли
- •4.5.1. Создание ролей
- •4.5.2. Изменение ролей
- •5.1. Блочная структура программ
- •5.2. Раздел declare
- •5.3. Раздел begin-end
- •5.4. Раздел exception
- •6. Простые типы данных pl/sql
- •6.1. Числовые типы
- •6.2. Символьные типы данных
- •6.2.1. Символьные типы фиксированной длины
- •6.2.2. Символьные типы переменной длины
- •6.3. Тип данных даты-времени
- •6.4. Логический тип данных
- •6.5. Тип данных %type
- •6.6. Преобразование типов
- •6.6.1. Явное преобразование типов
- •6.6.2. Неявное преобразование типов
- •6.7. Порядок вычисления выражений
- •Вопросы для самоконтроля
- •7. Операторы языка pl/sql
- •7.1. Оператор присваивания
- •7.2. Составной оператор
- •7.3. Условный оператор
- •7.4. Оператор выбора case
- •7.5. Оператор простого цикла (цикл loop)
- •7.6. Оператор цикла с параметром (цикл for)
- •7.7. Оператор цикла с предусловием (цикл while)
- •7.8. Оператор перехода goto
- •Вопросы для самоконтроля
- •8. Работа с базами данных
- •8.1. Выборка данных
- •8.2. Курсоры
- •8.2.1. Создание и работа с курсорами
- •Cursor c_sal is
- •Cursor c_sal is
- •Cursor c_sal is
- •8.2.2. Курсорные атрибуты
- •8.2.3. Параметры курсора
- •8.2.4. Курсорный цикл for
- •8.3. Изменение данных в таблицах
- •8.4. Транзакции
- •9. Хранимые подпрограммы pl/sql
- •9.1. Процедуры
- •9.2. Функции
- •9.3. Пакеты
- •9.4. Области действия и область видимости переменных
- •9.5. Параметры процедур и функций
- •Вопросы для самоконтроля
- •10. Стандартные пакеты pl/sql
- •10.1. Пакет dbms_output
- •11. Интегрированная среда Oracle 10g xe
- •11.1 Как начать работу с Oracle 10g xe
- •11.2 Ваша первая программа
7.5. Оператор простого цикла (цикл loop)
Оператор цикла LOOPявляется основной конструкцией, позволяющей повторять выполнение набора операторов (команд) несколько раз. В этой конструкции нет никакого способа выйти из цикла автоматически. Для выхода используется оператор “EXIT” или “EXITWHEN(условие)” внутриLOOP. Например:
DECLARE
cnt number;
BEGIN
cnt := 0;
LOOP
INSERT INTO test VALUES(2 * cnt);
cnt := cnt +1;
IF cnt >= 8 THEN
EXIT;
END IF;
END LOOP;
END;
/
7.6. Оператор цикла с параметром (цикл for)
В тех случаях, когда нужно повторить набор команд фиксированное число раз, используется конструкция FOR. Например:
DECLARE
cnt number;
BEGIN
cnt := 0;
FOR cnt IN 1 .. 8 LOOP
INSERT INTO test VALUES(2 * cnt);
END LOOP;
END;
/
7.7. Оператор цикла с предусловием (цикл while)
В этой конструкции условие выхода из цикла проверяется при каждом проходе. Пример:
DECLARE
cnt number;
BEGIN
cnt := 0;
WHILE cnt < 8 LOOP
INSERT INTO test VALUES(2 * cnt);
cnt := cnt +1;
END LOOP;
END;
/
7.8. Оператор перехода goto
Операторы условных (IF-THEN и CASE) и циклических (LOOP, FOR и WHILE) вычислений (см. пп. 7.3–7.7) позволяют разрабатывать программы с нелинейной последовательностью выполнения команд. Используя эти операторы, мы можем перемещаться по программе, обходя группы команд или возвращаясь циклически к уже выполненным команда. Кроме этого PL/SQL предоставляет возможность совершать перемещения по программе с помощью оператора GOTO.
Использовать это оператор при программировании не рекомендуется, но в некоторых случаях GOTO является правильным решением.
Оператор GOTO имеет следующий синтаксис:
GOTO имя_метки;
Имя_метки – это идентификатор какого-либо места программы, который синтаксически оформляется следующим образом:
<<имя_метки>>
Двойные угловые скобки являются ограничителями метки, имена_меток играют роль указателей, доступных во время выполнения программы. В следующем примере показано, как GOTO используется для обхода участка программы.
BEGIN
DBMS_OUTPUT.PUT_LINE(‘Начало блока’);
GOTO m_last;
DBMS_OUTPUT.PUT_LINE(‘Пропускаемый оператор’);
RETURN ;
<<m_last>>
DBMS_OUTPUT.PUT_LINE(‘Конец блока’);
END;
/
В этом примере используется функция вывода на экран – DBMS_OUTPUT.PUT_LINE (см. 10). В результате выполнения программы получим следующий вывод:
Начало блока
Конец блока
В PL/SQL следует соблюдать следующие правила использования оператора GOTO^
GOTO не может ссылаться на метку, находящуюся во вложенном блоке;
нельзя, находясь вне оператора IF, выполнить оператор GOTO, ведущий внутрь этого оператора;
находясь внутри оператора IF, нельзя выполнить GOTO, ведущий к метке, находящейся внутри другого оператора IF;
нельзя с помощью GOTO переходить из секции исключительных ситуаций (EXCEPTION) в любую другую секцию блока.
Вопросы для самоконтроля
7.1. Какие формы условного оператора IF применяются в PL/SQL?
7.2. Какие условные операторы используются в PL/SQL кроме IF?
7.3. Чем отличается оператор LOOP от оператора FOR?
7.4. Как можно выйти из цикла LOOP?
7.5. Возможно ли использование оператора GOTO в программах PL/SQL?
7.6. Какой оператор цикла нужно использовать, если известно необходимое число проходов цикла?
7.7. Как синтаксически оформляется метка, на которую ссылается оператор GOTO?
7.8. Можно ли ссылаться на метку, находящуюся во внешнем блоке?
7.9. Допустимо ли перейти из секции EXCEPTION в секцию BEGIN с помощью оператора GOTO?
7.10. Какой из операторов правильно использовать для выхода их цикла – EXIT или EXITWHEN?