Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с Oracle / Язык PL SQL.docx
Скачиваний:
11
Добавлен:
28.06.2021
Размер:
768.74 Кб
Скачать

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

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

Работа с данными таблицы посредством команд языка DML. Программы PL/SQL могут включать любые синтаксически правильные команды INSERT, UPDATE и DELETE для изменения строк в таблице базы данных. Переменная или константа блока PL/SQL может присутствовать в качестве операнда выражения в команде DML. В качестве примера рассмотрим следующий анонимный блок PL/SQL, добавляющий новую запись в таблицу Catalogs:

После выполнения этой программы выберите в навигаторе узел Tables, таблицу Catalogs и откройте закладку Data. Нажмите кнопку Refresh (Ctrl+R)для того, чтобы увидеть новую запись.

Изменения, сделанные командами INSERT, UPDATE и DELETE внутри блока, являются частью текущей транзакции данного сеанса. Хотя во многих типах блоков пользователь может включить команды COMMIT и ROLLBACK, управление транзакциями обычно осуществляется за границами блока, что делает наглядными границы транзакции в программе.

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

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

Объявление и использование подпрограмм: процедуры и функции

Раздел объявлений блока может содержать описание именованных процедур, называемых подпрограммами. В этом случае операторы в теле программы могут вызывать (исполнять) подпрограммы каждый раз, когда это необходимо. Язык PL/SQL поддерживает два типа подпрограмм: процедуры в функции.

Процедурой называется подпрограмма, выполняющая некоторое действие. Функцией называется подпрограмма, которая вычисляет некоторое значение и возвращает его в программу, вызвавшую данную функцию.

Если подпрограмма была объявлена как процедура, то в нее можно передать некоторые значения и получить от нее значения с помощью параметров процедуры. Обычно вызывающая программа передает подпрограмме одну или более переменных в качестве параметров. Чтобы отличать параметры от переменных, констант и т.д., рекомендуется при объявлении снабжать их префиксом р_.

Для каждого параметра необходимо указать его тип без ограничивающих условий. Например, следует описывать параметр как VARCHAR2, а не VARCHAR2(100). Кроме того, для каждого параметра должен быть задан один из режимов его использования: IN, OUT или IN OUT:

  • параметр IN передает в подпрограмму значение, но подпрограмма не может изменить значение внешней переменной, соответствующей этому параметру;

  • параметр OUT инициализируется значением Null, после чего подпрограмма может манипулировать этим параметром для изменения значения соответствующей переменной во внешней вызывающей среде (подпрограмма может установить значение параметра OUT, но не может его прочитать);

  • параметр типа IN OUT соединяет в себе свойства параметров типа IN и OUT.

Введите приведенный ниже анонимный блок PL/SQL, который объ­являет процедуру, печатающую горизонтальные линии заданной ширины:

В теле программы три раза вызывается процедура printLine:

  • Первый вызов задает значения обоих параметров про­цедуры, используя позицию параметра в строке. Значения параметров, указанные в вызове процедуры, неявно соответствуют параметрам процедуры, объявленным в тех же по­зициях.

  • Второй вызов задает значения параметров про­цедуры, используя их имена: значению параметра предше­ствуют имя параметра и оператор соответствия (=>). При использовании имен параметры могут указываться в произвольном порядке.

  • Третий вызов показывает, что для параметров процеду­ры без значений по умолчанию присвоение значений является обя­зательным, тогда как для параметров, имеющих значение по умолчанию, значения могут быть опущены.

Функция отличается от процедуры тем, что возвращает значение в среду, из которой была вызвана. Спецификация функции объявляет тип значения, возвращаемого функцией. Тело функции должно включать в себя один или более операторов RETURN для возвращения значения функции в вызывающую среду. Рассмотрим объявление и использование функции, вычисляющей сумму заказа:

Программа может вызвать функцию везде, где выражение является действительным, например, в качестве параметра при вызове процедуры или в правой части оператора присваивания. Команда SQL может также ссылаться на определенную пользователем функцию в усло­вии блока WHERE.