Скачиваний:
39
Добавлен:
11.04.2015
Размер:
5.18 Mб
Скачать

27. Процедурные элементы pl/sql : циклы, условия…

Циклы предназначены для многократного исполнения конкретных операций. В PL/SQL есть 3 типа циклов:

1.Безусловные циклы (бесконечные) - выход из них не предусмотрен. Потому как такие циклы специфичны и применяются редко, то организуются они при помощи условных циклов. Условие возможно вообще не указывать или вместо него применять константу. Примером подобного цикла является машина LOOP ... END LOOP.

LOOP

NULL;

END LOOP

Из таких циклов есть три способа выхода:

EXIT - это безусловный выход. Обычно он используется вместе с оператором IF, в котором проверяется условие выхода.

EXIT WHEN - в этом случае выход осуществляется пр при выполнении условия, описанного после WHEN.

GOTO - в этом случае выход из цикла осуществляется с переходом во внешний контекст, заданный меткой.

2.Условные циклы - команды выполняются прежде тех пор, пока истинно условие. Пример, WHILE условие LOOP ... END LOOP.

Цикл WHILE очень похож на простой цикл. Его ключевым отличием является то, что цикл WHILE проверяет условие завершения до выполнения тела цикла. Следовательно, тело цикла может не быть выполнено ни разу:

PROCEDURE display_multiple_years(

Start_year_in IN PLS_INTEGER,end_year_in IN PLS_INTEGER)

IS

L_curent_yaer PLS_INTEGER :=start_year_in;

BEGIN

WHILE (L_curent_yaer<=end_ year_in)

LOOP

Kkk

END LOOP;

END display_multiple_years;

3.Циклы со счетчиком - цикл, в коем счетчик меняет свое значение с начального прежде конечного с определенным этапом, и для любого значения счетчика выполняется последовательность команд, находящихся в цикле. Представителем данного типа циклов является машина FOR счетчик IN стартовое значение..конечное значение LOOP ... END LOOP.

Oracle поддерживает циклы FOR со счетчиком и с курсором. Для цикла FOR со счетчиком вы указываете начальное и конечное целые значения, а все остальное за вас делает PL/SQL: проходит все значения внутри заданного диапазона и завершает цикл:

PROCEDURE display_multiple_years(

Start_year_in IN PLS_INTEGER,end_year_in IN PLS_INTEGER)

IS

BEGIN

FOR L_curent_yaer…end_year_in

LOOP

display_total_sales(l_current_year):

END LOOP;

END display_multiple_years;

Цикл FOR с курсором имеет такую же базовую структуру, только в данном случае вместо указания верхней и нижней границ целочисленного диапазона следует явно задать курсор или использовать оператор

SELECT:

PROCEDURE display_multiple_years(

Start_year_in IN PLS_INTEGER,end_year_in IN PLS_INTEGER)

IS

BEGIN

FOR L_curent_yaer IN(

SELECT* FROM sales_data

WHERE year BETWEEN Start_year_in AND end_year_in)

LOOP

Display_total_sales (L_curent_yaer);

END LOOP;

END display_multiple_years;

УСЛОВИЯ:

1)IF – THEN - IF ассоциирует условие с последовательностью операторов, заключенных с помощью ключевых слов THEN и END IF. Если условие истинно, производится действие оператора, а если условие ложно или NULL, то, если оператор не делает ничего.

Синтаксис IF-THEN:

IF condition THEN

S;

END IF;

2) IF-THEN-ELSE – Последовательность операторов IF-THEN может сопровождаться дополнительным ELSE оператором, который выполняется, когда условие ложно.

Синтаксис IF-THEN-ELSE:

IF condition THEN

S1;

ELSE

S2;

END IF;

В IF-THEN-ELSE операторе, когда условие истинно(правда), оператор S1 выполняется ,а S2 пропускается; когда условие ложно, то S1 пропускается, и происходит выполнение оператора S2 .

3) IF-THEN-ELSIF – оператор позволяет Вам выбирать между несколькими переменными. оператор IF-THEN может сопровождаться дополнительным ELSIF ... ELSE оператором. ELSIF позволяет добавлять дополнительные условия.

Синтаксис:

DECLARE

номер (3): = 100;

НАЧАТЬ

IF (= 10), то

dbms_output.put_line ('Значение 10');

ELSIF (= 20) THEN

dbms_output.put_line ('Значение составляет 20');

ELSIF (= 30) THEN

dbms_output.put_line ('Значение составляет 30');

ELSE

dbms_output.put_line ('Ни одно из значений для');

END IF;

dbms_output.put_line ("Точное значение является: '| |);

END;

4) Вложенный IF-THEN-ELSE оператор - Вы можете использовать IF или ELSE IF операторы внутри других IF or ELSE IF операторов.

Пример:

DECLARE

a number(3): = 100;

b number(3): = 200;

BEGIN

- Проверить логическое условие

IF (= 100) THEN

- Если условие истинно, то проверьте следующее

IF (В = 200) THEN

- Если условие истинно затем распечатать следующие

dbms_output.put_line ('Значение в 100 и в 200 б');

END IF;

END IF;

dbms_output.put_line ("Точное значение является: '| |);

dbms_output.put_line ("Точное значение Ь: '| | б);

END;

5) оператор CASE - Как IF оператор, CASE выбирает одну последовательность инструкций для выполнения. Однако, чтобы выбрать последовательность, оператор использует селектор, а не несколько логических выражений. Селектор - выражение, значение которого используется для выбора одного из нескольких вариантов.

Пример:

DECLARE

grade char(1): = 'B';

BEGIN

CASE

when grade= 'A', то dbms_output.put_line («отлично»);

when grade= 'B', то dbms_output.put_line («очень хорошо»);

when grade= 'C', то dbms_output.put_line («Хорошо»);

when grade= 'D', то dbms_output.put_line ('Вы прошли');

when grade= 'F', то dbms_output.put_line («Лучше попробуйте еще:);

ELSE dbms_output.put_line ("Нет такого сорта ');

end case;

END;

Соседние файлы в папке ответы