из предыдущего примера, в объявлении переменной присутствует ее
имя и тип, например, переменная v_width была объявлена как:
□ v_width INTEGER;
Примечание Типы PL/SQL подобны типам столбцов базы данных. Все возможные типы можно
найти в приложении.
Следующий пример иллюстрирует еще несколько объявлений переменных
(которые могут быть использованы для хранения значений столбцов
таблицы products):
□ v_product_id INTEGER;
v_product_type_id INTEGER;
v_name VARCHAR2(30)
v_description VARCHAR2(50)
v_price NUMBER(5, 2)
Кроме того, можно задать тип переменной, используя ключевое слово
%TYPE, указывающее PL/SQL, что необходимо объявить переменную с тем
же типом, что и у указанного столбца таблицы. Следующий пример использует
%TYPE для объявления переменной того же типа, что и столбец
price таблицы products, то есть NUMBER(5, 2):
П v_product_price products.price%TYPE;
Условная логика
В PL/SQL для выполнения условной логики можно использовать ключевые
слова IF, THEN, ELSE, ELSIF и END IF:
□ IF условие1 THEN
операторы1
ELSIF условие2 THEN
операторы2
ELSE
операторыЗ
END IF;
где
■ условие1 и условие2 являются булевыми (логическими) выражениями,
принимающими значения true (истина) и false (ложь);
■ операторы 1, операторы2 и операторыЗ являются операторами PL/
SQL.
Знакомство с программированием на PUSQL 357
Эта условная логика выполняется следующим образом.
■ Если условие1 истинно, выполняются операторы-!.
* Если условие1 ложно, но условив2 истинно, выполняются операто-
ры2 .
■ Если ни условие"!, ни условие2 не являются истинными, выполняются
операторыЗ.
Можно вкладывать операторы IF внутрь других операторов IF:
□ IF v_count > О THEN
v_message := ‘ v_count is po sitive’ ;
IF v_area > 0 THEN
vjnessage := ‘ v_count and v_area are po sitive’ ;
ELSIF v_count = 0 THEN
v_message := ‘ v_count is zero’ ;
ELSE
vjnessage := 'v_count is negative';
END IF;
В этом примере, если v_count больше нуля, то vjmessage принимает
значение v_count is positive’. Если v_count и v_area больше нуля, то v_
message принимает значение 'v_count and v_area are positive'. Остальная
логика работает аналогичным образом.
Циклы
Циклы используются для того, чтобы можно было ноль или больше раз
выполнить один или несколько операторов. В PL/SQL есть три типа циклов.
■ Простые циклы. Выполняются до тех пор, пока цикл явно не закончится.
■ Циклы WHILE. Выполняются до тех пор, пока не произойдет заданное
условие.
■ Циклы FOR Выполняются предварительно указанное число раз.
В следующих разделах вы ознакомитесь с этими циклами.
Простые циклы
Простой цикл выполняется до тех пор, пока он явно не закончится. Синтаксис
простого цикла имеет следующий вид:
□ LOOP
операторы
END LOOP;
Чтобы закончить цикл, используются операторы EXIT или EXIT WHEN.
Оператор EXIT завершает цикл немедленно, а оператор EXIT WHEN - при
выполнении указанного условия.
358 Глава 11
В следующем примере показан простой цикл. Перед началом цикла
переменная v_counter инициализируется значением 0, а затем при каждом
выполнении цикла к v_counter прибавляется 1. Выход из цикла происходит
при помощи оператора EXIT WHEN, когда v_counter становится
равным 5.
П v_counter := 0;
LOOP
v_counter := v_counter + 1 ;
EXIT WHEN v_counter = 5;
END LOOP;
Примечание Оператор EXIT WHEN может появиться в любом месте кода цикла.
В базе данных Oracle l l g вы также можете завершить текущую итерацию
цикла при помощи выражения CONTINUE или CONTINUE WHEN. Выражение
CONTINUE безусловно завершает текущую итерацию цикла и переходит
к следующей итерации; выражение CONTINUE WHEN завершает текущую итерацию
цикла при возникновении указанного условия и переходит к следующей
итерации. Следующий пример демонстрирует использование выражения
CONTINUE:
□ v_counter := 0;
LOOP
— после того, как выполнено выражение CONTINUE, выполнение кода начинается
отсюда
v_counter := v_counter + 1 ;
IF v_counter = 3 THEN
CONTINUE; - безусловно завершает текущую итерацию
END IF;
EXIT WHEN v_counter = 5;
END LOOP;
Следующий пример демонстрирует использование выражения CONTINUE
WHEN:
□ v_counter := 0;
LOOP
- после того, как выполнено выражение CONTINUE WHEN, выполнение кода начинается
отсюда
□ v_counter := v_counter + 1 ;
CONTINUE WHEN v_counter = 3; - завершает текущую итерацию при v_counter
= 3
EXIT WHEN v_counter = 5;
END LOOP;
Примечание Выражения CONTINUE или CONTINUE WHEN не могут пересекать границу
процедуры, функции или метода.
Знакомство с программированием на PL/SQL 359