Выбрать главу

из предыдущего примера, в объявлении переменной присутствует ее

имя и тип, например, переменная 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