Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции СУБД.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6.32 Mб
Скачать

24.4.Функциональные возможности программ

Выше было дано общее представление о типах конструкций, которые можно объявить в блоке PL/SQL. Теперь посмотрим, какие функции можно выполнять в теле PL/SQL (и в разделе обработки исключительных ситуаций). Далее в общих чертах будут представлены некоторые основные функциональные возможности PL/SQL.

24.4.1 Управление выполнением программ

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

Условное управление

Оператор IF–ELSIF–ELSE в программе PL/SQL вычисляет некоторое логическое условие и, когда это условие истинно (TRUE), выполняет один или несколько операторов. В примере псевдопрограммы, приведенной ниже, показано использование команды IF–ELSIF–ELSE.

if условие then

оператор 1;

оператор 2;

elsif (не elseif)

оператор 3;

оператор 4;

else

оператор 5;

оператор 6;

end if;

Итерационное управление

Для повторения выполнения группы операторов в PL/SQL-программах можно применять циклы. В примерах псевдопрограмм, приведенных ниже, продемонстрировано использование базовых циклов, циклов WHILE и FOR.

-- БАЗОВЫЙ ЦИКЛ (LOOP) С ИСПОЛЬЗОВАНИЕМ EXIT – WHEN

loop

оператор 1;

оператор 2;

exit when условие;

end loop;

-- ЦИКЛ WHILE

while условие loop

оператор 1;

оператор 2;

end loop;

-- ЦИКЛ FOR С ВЛОЖЕННЫМИ ЦИКЛОМ И МЕТКАМИ

« внешний_цикл » – метка или имя цикла

for x in у.. z loop

внешний_оператор1;

« внутренний_цикл »

loop

внутренний_оператор1;

внутренний_оператор2;

exit внешний_цикл when условие1;

exit внутренний_цикл when условие2;

end loop внутренний_цикл;

внешний_оператор2;

end loop внешний_цикл;

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

24.4.2 Взаимодействие с базами данных

Основное назначение языка PL/SQL – создание программ для работы с базами данных. Программа PL/SQL может взаимодействовать с базами данных только посредством SQL. В последующих параграфах показано, как с помощью программ PL/SQL управлять информацией, содержащейся в базах данных, используя SQL операторы DML, курсоры и динамический SQL. (Вопросы, связанные с динамическим SQL, будут рассматриваться отдельно при рассмотрении модуля-утилиты DBMS_SQL.)

Стандартный dml

Всё множество инструкций SQL условно разделяют на два подмножества: DML (Data Manipulation Language) и DDL (Data Definition Language). Подмножество DML включает в себя все инструкции по управлению данными в базе (SELECT, INSERT, DELETE, UPDATE). Подмножество DDL включает в себя все инструкции по созданию объектов баз данных (CREATE), таких как таблицы, представления, индексы, синонимы и др., а также инструкции, изменяющие определение таблиц (ALTER TABLE), управляющие привилегиями пользователей (GRANT) и удаляющие объекты баз данных (DROP).

Любой из SQL – операторов DML можно использовать в программах для модифицирования базы данных ORACLE. Например, в процедуре UPDATE_PART_UNITPRICE, описанной в начале этого раздела, для модификации записи в таблице PARTS применяется простой оператор UPDATE. Для внесения изменений в строки таблиц баз данных программы PL/SQL могут включать любые корректные операторы INSERT, UPDATE или DELETE.

В программах PL/SQL для задания переменной некоторого значения или набора значений часто применяются операторы присваивания. Для этого можно использовать команду SELECT INTO. Например:

declare

current_part parts %rowtype;

begin

select * into current_part

from parts

where id=6;

Если в результирующем множестве оператора SELECT INTO содержится более одной строки, ORACLE возвращает сообщение об ошибке. Для обработки запроса, возвращающего более одной строки, в программе необходимо использовать курсор.