Управляющие конструкции PL/SQL презентация

Содержание

Используются для изменения логической последовательности выполнения команд Условные операторы IF: IF-THEN IF-THEN-ELSE IF-THEN-ELSIF IF-THEN-ELSIF-ELSE Управление процессом выполнения IF

Слайд 14
Управляющие конструкции


Слайд 2Используются для изменения логической последовательности выполнения команд
Условные операторы IF:
IF-THEN
IF-THEN-ELSE
IF-THEN-ELSIF
IF-THEN-ELSIF-ELSE

Управление процессом выполнения

IF

Слайд 3 IF condition THEN
statements;
[ELSIF condition THEN
statements;]
[ELSE
statements;]
END IF;
Конструкции IF
Пример:
IF UPPER(v_ename) = ’OSBORNE’
THEN


v_mgr := 22;
END IF;

Слайд 4Пример:
. . .
IF v_ename = 'MILLER' THEN
v_job := 'SALESMAN';
v_deptno := 35;
v_new_sal

= sal*2;
END IF;
. . .

Простой IF


Слайд 5Пример:

. . .
IF v_ename = 'MILLER' AND salary > 6500


THEN
v_deptno := 60;
END IF;
. . .

Составное условие IF


Слайд 6IF-THEN-ELSE
IF условие
THEN действие
ELSE действие
TRUE
FALSE


Слайд 7IF-THEN-ELSE (пример)
Пример:
DECLARE
v_hiredate DATE := '12-Dec-1990';
v_five_years BOOLEAN;
BEGIN
...
IF MONTHS_BETWEEN(SYSDATE,v_hiredate)/12 > 5 THEN
v_five_years :=

TRUE;
ELSE
v_five_years := FALSE;
END IF;
...

Слайд 8IF-THEN-ELSIF
IF условие
THEN действие
TRUE
FALSE
THEN действие
ELSIF условие
ELSE действие
TRUE
FALSE


Слайд 9IF-THEN-ELSIF (пример)
Пример:
...
IF v_start > 100 THEN
v_start :=

0.2 * v_start;
ELSIF v_start >= 50 THEN
v_start := 0.5 * v_start;
ELSE
v_start := 0.1 * v_start;
END IF;
...

Слайд 10Сравнение с NULL
Обработка пустых значений (NULL) с использованием IS NULL ,

IS NOT NULL
Составление конкатенированных выражений используя NULL значения.







* нюансы… NULL
https://habrahabr.ru/post/127327/

Работа с NULL значениями

Оператор OR:
( null or true ); -- TRUE
( null or false ); -- UNKNOWN
( null or null ); -- UNKNOWN

Оператор AND:
( null and true ); -- UNKNOWN
( null and false ); -- FALSE
( null and null ); -- UNKNOWN


Слайд 11Простые сравнения, имеющие NULL значения всегда возвращают NULL. Если в IF

используется сравнение с NULL, то и результат будет NULL.
Применение логического оператора NOT к пустым выражениям выдает NULL.

Обработка NULL значений

declare
x integer := 5;
y integer ; -- не инициализация соотв. := NULL;
begin
IF (x != y) THEN --результат NULL, не TRUE
-- IF NOT(x != y) THEN --результат NOT NULL, не TRUE
-- IF NOT(x != y) or (1=1) THEN --результат TRUE!!!
dbms_output.put_line('inside then');
ELSE
dbms_output.put_line('inside else');
END IF;
end;
PL/SQL procedure successfully completed.
inside else
inside else


Слайд 12Логические таблицы


Слайд 13Условия с булевыми значениями
Пример:

v_flag := v_reorder_flag AND v_available_flag;


Слайд 14Циклы повторяют инструкцию или последовательность операций в течении указанного количества раз.

В

PL/SQL существует три типа цикла:
Основной цикл (LOOP)
Цикл FOR
Цикл WHILE

Управление итерациями


Слайд 15LOOP
statement1;
. . .
EXIT

[WHEN condition]; --условие выхода
END LOOP;

LOOP

condition – булево выражение или инструкция, возвращающее TRUE или FALSE


Слайд 16 DECLARE
v_ordid item.ordid%TYPE := 601;
v_counter NUMBER(2) := 1;
BEGIN
LOOP
INSERT INTO item(ordid, itemid)

VALUES(v_ordid, v_counter);
v_counter := v_counter + 1;
EXIT WHEN v_counter > 10;
END LOOP;
END;

* EXIT блоков м.б. не один, условия м.б. разными
* EXIT м.б. безусловным EXIT;
* В циклах FOR и WHILE не рекомендуется использование EXIT, ухучшается отладка и поддержка кода.

Пример LOOP


Слайд 17WHILE condition LOOP
statement1;
statement2;
. . .
END LOOP;
WHILE
condition – условие выполнения для каждой

итерации, до тех пор пока верно выполняется цикл (принимает значения TRUE или FALSE)

Слайд 18 DECLARE
v_counter NUMBER(3) := 1;
BEGIN
WHILE v_counter

INSERT INTO tmp(id, name) VALUES(v_counter, 'TMP'||v_counter);
v_counter := v_counter + 1;
--EXIT WHEN v_counter > 10;
--EXIT WHEN v_counter > 2;
END LOOP;
END;

WHILE (пример)


Слайд 19lower – начальное значение итерации
upper – конечное значение итерации
counter – счетчик

итераций, объявление не обязательно.

Цикл FOR

FOR counter IN [REVERSE] lower..upper
LOOP
statement1;
statement2;
. . .
END LOOP;


Слайд 20Счетчик можно не объявлять в блоке DECLARE
Ссылка на счётчик разрешается только

в пределах цикла.
Для задания интервала может использоваться выражение.
Не следует присваивать счетчику значения


FOR - рекомендации


Слайд 21 DECLARE
v_counter NUMBER(3) := 1;
BEGIN
FOR iasasd in 1 .. 10

LOOP
INSERT INTO tmp(id, name) VALUES(iasasd,'TMP'||iasasd);
--EXIT WHEN v_counter > 1;
--v_counter:=iasasd;
END LOOP;
--v_counter:=iasasd;
END;

FOR (пример)


Слайд 22Для циклов, которые необходимо выполнить хотя бы 1 раз - простой

LOOP
Используем WHILE если необходимо проверять условие перед каждой итерацией
Используем FOR если точно известно количество итераций

Рекомендации
по использованию циклов


Слайд 23В PL/SQL существует возможность вкладывать циклы друг в друга.
Для различия между

блоками и циклами используются метки.
В случае использования меток, выход из цикла осуществляется по меткам:

...
END LOOP my_label;

Вложенные циклы и метки


Слайд 24DECLARE
v_counter integer:=1;
v_counter_i integer:=1;
BEGIN

LOOP

v_counter := v_counter + 1;
v_counter_i:=1;
<>
LOOP
v_counter_i := v_counter_i + 1;
EXIT outer_loop WHEN v_counter_i=5;
EXIT WHEN v_counter_i = 10;
END LOOP inner_loop;
EXIT WHEN v_counter = 10;
END LOOP outer_loop;
dbms_output.put_line(v_counter);
dbms_output.put_line(v_counter_i);
END;

Вложенные циклы и метки (пример)


Слайд 25DECLARE
BEGIN
FOR iasasd in 1 .. 10 LOOP

IF iasasd >3 and iasasd <=8 THEN
CONTINUE;
END IF;
INSERT INTO tmp(id, name)
VALUES(iasasd, 'TMP'||iasasd);
END LOOP;
END;

select * from TMP ;
1 TMP1
2 TMP2
3 TMP3
9 TMP9
10 TMP10

CONTINUE : переход к следующей итерации цикла


Слайд 26Итоги
Научились работать с операторами изменяющими логическую последовательность команд
Условные операторы IF
Циклы
LOOP
FOR
WHILE
EXIT



Слайд 27Практика №4!
40 минут


Слайд 28Самостоятельное изучение: CASE
Простые команды CASE
CASE employee_type
WHEN 'S' THEN
award_salary_bonus(employee_id);
WHEN 'H' THEN
award_hourly_bonus(employee_id);
ELSE
RAISE invalid_employee_type;
END

CASE;

Поисковая команда CASE
CASE
WHEN salary > 20000 AND salary <= 40000
THEN give_bonus(employee_id, 1000);
WHEN salary > 40000
THEN give_bonus(employee_id, 500);
ELSE
give_bonus(employee_id, 0);
END CASE;

CASE в стандарте SQL с 1992 года, в с версии Oracle8, в PL/SQL — с Oracle9. Поддерживаются следующие разновидности команд CASE:
Простая команда CASE — связывает одну или несколько последовательностей ко-
манд PL/SQL с соответствующими значениями .
Поисковая команда CASE — выбирает для выполнения одну или несколько после-
довательностей команд в зависимости от результатов проверки списка логических
значений. Выполняется последовательность команд, связанная с первым условием,
результат проверки которого оказался равным TRUE.


Слайд 29Самостоятельное изучение: GOTO
BEGIN
GOTO second_output;
DBMS_OUTPUT.PUT_LINE('Эта строка никогда не выполняется.');

DBMS_
Команда GOTO выполняет безусловный

переход к другой исполняемой команде в том же исполняемом разделе блока PL/SQL. Общий формат команды GOTO:
GOTO имя_метки;

На использование команды GOTO налагаются ограничения:
- За меткой должна следовать хотя бы одна исполняемая команда.
- Целевая метка должна находиться в пределах области действия оператора GOTO.
- Целевая метка должна находиться в той же части блока PL/SQL, что и оператор GOTO.

Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика