КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Управляющие структуры PL/SQL
FROM authors a WHERE a.id = b.author1 OR a.id=b.author2 OR a.id=b.author3) FROM books b WHERE isbn=‘78824389’; BEGIN OPEN book_cur; LOOP FETCH book_cur INTO v_title, cv_author; EXIT WHEN book_cur%NOTFOUND; DBMS_OUTPUT.PUT_LINE(‘Title from the main cursor: ‘||v_title); LOOP FETCH cv_author INTO v_author; EXIT WHEN cv_author%NOTFOUND;
v_counter:=v_counter + 1; DMBS_OUTPUT.PUT_LINE(‘Author’ ||v_counter|| ‘:’ ||v_author.first_name|| ‘ ‘ ||v_author.last_name); END LOOP; END LOOP; CLOSE book_cur; END; /
Секция выполнения содержит код, реализующий функциональность блока. Код может представлять собой как любую команду SQL, так любую управляющую структуру PL/SQL. Секция выполнения блока PL/SQL состоит из одной или более логических команд. Каждая команда завершается разделителем – точкой с запятой. Физический маркер конца строки в программе PL/SQL игнорируется компилятором (воспринимается только как завершение однострочного комментария, который начинается символами --). Условные управляющие операторы. PL/SQL включает в себя три разновидности команды IF-THEN-ELSE, а также команду и вырвжение CASE. Синтаксис CASE появился только в версии Oracle9i. IF-THEN-ELSE позволяет реализовать в программах условную логику. 1 вид: конструкция IF-THEN: IF условие THEN Выполняемая команда(ы) END IF; 2 вид: конструкция IF-THEN-ELSE: IF условие THEN Последовательность выполняемых команд ELSE Последовательность выполняемых команд END IF; 3 вид: конструкция IF_THEN ELSIF: IF условие-1 THEN ELSIF условие-N THEN Команды-N [ELSE else_команды] END IF; CASE (команда) позволяет выбрать для выполнения одну последовательность команд из множества предложенных последовательностей. CASE выражение-переключатель WHEN выражение_для_значения THEN действие; [WHEN выражение_для_значения THEN действие;...] [ELSE действие;] END CASE;
Команда CASE похожа на команду IF-THEN-ELSIF. Но в команде CASE выражение-переключатель следует непосредственно с ключевым словом CASE. Выражение вычисляется и сравнивается со значением каждой инструкции WHEN. Как только операция сравнения возвращает значение TRUE, управление передаётся команде, следующей за END CASE. Если выражение-переключатель вычислено как NULL, то ему будет соответствовать только инструкция ELSE. Инструкция WHEN NULL не будет соответствовать никакому значению, т.к. сервер Oracle выполняет проверку равенства выражений. И команда, и выражение CASE должны включать в себя инструкцию ELSE, которая будет выполнена в случае, если ни одна из инструкций WHEN не будет оценена как TRUE, т.к. в случае отсутствия совпадения процессов PL/SQL выдаст ошибку.
CASE(выражение) CASE WHEN Выражение=выражение_для_значения THEN Действие; [WHEN выражение=выражение_для_значения THEN Действие;…] [ELSE Действия;] END CASE; В отличие от команды CASE выражение CASE не содержит выражения-переключателя; вместо этого каждая инструкция WHEN содержит полное булево выражение. Выполняется первое подходящее выражение WHEN, затем управление переходом к команде, следующей за END CASE. Команды управления последовательностью выполнения. Существуют два типа команд управления последовательностью выполнения: GOTO и NULL. GOTO выполняет безусловный переход к указанной метке.
GOTO имя метки;
Обычно применять команду GOTO не рекомендуется. Если она используется, то за указанной меткой должна следовать хотя бы одна команда (при необходимости этой единственной выполняемой командой может быть команда NULL). На применение команды GOTO накладываются следующие ограничения: - невозможен переход из команды IF, LOOP или вложенного блока; - невозможен переход в команду IF, LOOP или вложенный блок; - невозможен переход их одной секции команды IF в другую (из секции IF/THEN в секцию ELSE); - невозможен переход из и в подпрограмму; - невозможен переход из секции обработки исключений в выполняемую секцию блока PL/SQL; - невозможен переход из выполняемой секции в секцию обработки исключений блока PL/SQL, хотя такой переход осуществляется командой RAISE.
NULL – это команда, которая ничего не делает.
NULL;
Команда NULL полезна, когда нужна выполняемая, но ничего не делающая команда после метки. Также она может применяться для улучшения читаемости структуры IF-THEN-ELSE.
Команды цикла. Структура LOOP позволяет многократно выполнять последовательность команд. Существуют три вида циклов: простой цикл и циклы WHILE и FOR; при этом FOR имеет две разновидности: цикл со счётчиком и цикл по курсору. Все циклы могут иметь метку или включать в себя команду EXIT. Циклы могут быть дополнительно (необязательно) помечены для того, чтобы улучшить читаемость и контроль за их выполнением. Метка должна стоять непосредственно перед командой начала цикла. Команда EXIT применяется для прерывания цикла и передачи управления команде, следующей за END LOOP. Синтаксис команды EXIT:
EXIT [WHEN логическое_условие ];
Если в команду EXIT не включена инструкция WHEN, то цикл будет немедленно завершён командой. В противном случае цикл закончится только в случае, если значение выражения логическое_условие будет вычислено как TRUE. Команда EXIT является необязательной и может присутствовать в любой точке цикла.
Дата добавления: 2014-01-04; Просмотров: 1202; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |