Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на PLSQL. Учебно-методическое пособие по дисциплине Базы данных

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
802 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

Московский технический университет связи и информатики

Кафедра информационных систем

Фролова Е.А.

Учебно-методическое пособие

ПРОГРАММИРОВАНИЕ НА PL/SQL

по дисциплине

БАЗЫ ДАННЫХ

для студентов бакалавриата 3-его курса

направления 09.03.03 -Прикладная информатика

Москва 2016

План УМД на 2016/17 уч.г.

Учебно-методическое пособие

ПРОГРАММИРОВАНИЕ НА PL/SQL по дисциплине

БАЗЫ ДАННЫХ

Составитель Е.А.Фролова, доцент

В учебно-методическом пособии рассматриваются основы языка программирования, процедурное расширение языка SQL, разработанное компанией Oracle. Пособие предназначено для студентов-бакалавров третьего курса по направлению подготовки «Прикладная информатика», изучающих дисциплину «Базы данных».

Издание утверждено советом ФЭУ. Протокол № 8 от 10.05.16г.

Рецензент А.Г.Ерохин, к.т.н., доцент

2

ВЗАИМОДЕЙСТВИЕ С ORACLE

PL/SQL (Procedural Language / Structured Query Language) — язык программирования, процедурное расширение языка SQL, разработанное компанией Oracle. Является встроенным языком для средства быстрой разработки Oracle Forms, инструментом разработки отчётов Oracle Reports

и в Oracle Application Express.

PL/SQL даёт возможность использовать переменные, операторы, массивы, курсоры и исключения, позволяет обрабатывать данные в реляционной базе. Операторы SQL могут быть вызваны непосредственно из PL/SQL-процедуры, функции или триггера.

УПРАВЛЕНИЕ ТРАНЗАКЦИЯМИ

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

Выборка данных с помощью PL/SQL

Синтаксис

SELECT список_выборки

INTO имя_переменной | имя_записи FROM таблица

WHERE условие,

где:

 

список_выборки

список, содержащий, по крайней мере, один

 

столбец. Может содержать выражения SQL,

 

однострочные и групповые функции;

имя_переменной

скалярная переменная для хранения

 

возвращаемого значения;

имя_записи

запись PL/SQL для хранения возвращаемых

 

значений;

таблица

имя таблицы базы данных;

условие

состоит из имен столбцов, выражений, констант

 

(в том числе переменных и констант PL/SQL) и

 

операторов сравнения.

Возможности синтаксиса, предоставляемые сервером Oracle для команды SELECT.

Каждое предложение SQL заканчивается точкой с запятой (;).

Значения таблицам PL/SQL в цикле присваивается путем явного объявления курсора.

3

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

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

Соответствие типов данных идентификаторов и столбцов можно обеспечить с помощью атрибута %TYPE. Типы данных и количество переменных в предложении INTO соответствуют типам данных и количеству переменных в списке выборки.

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

Блок PL/SQL заканчивается предложением END. Можно добавить имя подпрограммы.

Функция должна, по крайней мере, иметь одно предложение RETURNдля возврата в вызываемую среду.

Пример.

Проверить, возвращен ли фильм с заданным кодом. Выполнение этого примера вызовет исключение, обработка которого не предусмотрена.

4

Select должен выдавать (или возвращать) только одну строку, если количество строк больше единицы, то нужно организовывать цикл перехода по выбранным записям.

Исключения для команды SELECT

Условие

Исключение

 

 

Команда SELECT находит

Исключение ТОО_MANY _ROWS (номер ошибки

более одной строки

сервера Огас1е"-1422")

 

 

Команда SELECT не

Исключение NO_ DATA_ FOUND (номер ошибки

находит ни одной строки

сервера Oracle"- 1403")

 

 

МАНИПУЛИРОВАНИЕ ДАННЫМИ С ПОМОЩЬЮ PL/SQL

Обработка данных в базе данных осуществляется с помощью команд

DML.

Вставка данных

При вставке строк в таблицу можно

Удалять необязательные входные аргументы (аргументы IN).

Использовать функции SQL (например, SYSDATE).

Применять для генерации первичных ключей последовательности базы данных.

Вычислять значения в блоке PL/SQL.

Задавать значения столбцов по умолчанию.

Пример.

Создание процедуры для вставки новой записи в таблицу Klient.

5

Обновление и удаление данных

В предложении SET указывается

столбец базы данных = столбец базы данных | переменная.

Для указания строк, в которых должны быть внесены изменения, используется предложение WHERE.

Если ни одна строка не изменяется, то в отличие от предложения SELECT в PL/SQL исключительная ситуация не возникает.

Пример.

Создание процедуры для изменения стоимости проката определенного фильма.

Пример.

Создание процедуры для удаления фильма из таблицы Film. Отбор по коду фильма.

6

Курсор SQL

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

Тип курсора

Описание

 

 

Неявные

Создаются неявно для всех команд DML и команд

курсоры

SELECT PL/SQL

 

 

Явные

Создаются программистом. Программист присваивает

курсоры

им имя и управляет ими с помощью специальных

 

команд

ОБРАБОТКА ЗАПРОСОВ С ИСПОЛЬЗОВАНИЕМ НЕЯВНЫХ КУРСОРОВ

Команда SELECT в PL/SQL должна возвращать только одну строку. PL/SQL пытается выбрать из неявного курсора две строки — одну в качестве ответа на запрос, а вторую, чтобы проверить, не переданы ли еще строки. PL/SQL создает неявный курсор с идентификатором SQL и обслуживает его автоматически.

 

Атрибуты неявного курсора SQL

 

 

Атрибут

Описание

SQL%ROWCOUNT

Целое количество строк, выбранных последней

 

командой SQL

SQL%FOUND

Логический атрибут, имеющий значение "истинно"

 

(TRUE), если последней командой SQL была выбрана

 

хотя бы одна строка

 

 

SQL%NOTFOUND

Логический атрибут, имеющий значение "истинно"

 

(TRUE), если последней командой SQL не выбрано

 

ни одной строки

 

 

SQL%ISOPEN

Всегда FALSE ("ложно"), т. к. PL/SQL закрывает

 

неявные курсоры сразу после их выполнения

 

 

Эти атрибуты используются как функции в командах PL/SQL, но не в командах SQL. Они полезны для оценки результатов операций DML. В PL/SQL не считается ошибкой, если команда DML не изменила ни одной строки таблицы, и исключительная ситуация в этом случае не возникает.

7

Пример.

Создать процедуру, подсчитывающую количество удаленных строк из таблицы Dogovor, отобранных по коду клиента.

Вывести результаты на экран.

ОБРАБОТКА ЗАПРОСОВ С ИСПОЛЬЗОВАНИЕМ ЯВНЫХ КУРСОРОВ Функции явных курсоров

Поочередная обработка строк, возвращаемых запросом.

Отслеживание текущей обрабатываемой строки.

Обработка более одной строки.

Ручное управление курсорами в блоке PL/SQL программистом.

Управление явными курсорами 1. Описание курсора

Для описания явного курсора используется оператор CURSOR. Можно задать параметры для подстановки переменных в запрос при открытии курсора. Можно также ссылаться на переменные в запросе, но они должны быть объявлены до использования оператора CURSOR.

Синтаксис

DECLARE

CURSOR имя_курсора IS команда_ select;

где:

 

имя_курсора

идентификатор курсора PL/SQL;

команда_select

команда SELECT без предложения INTO.

 

8

2.Открытие курсора

Синтаксис

OPEN имя_курсора;

где:

 

имя_курсора

имя ранее описанного курсора.

При открытии курсора выполняется запрос, и формируется активное множество строк. Это происходит после указания значений всех входных переменных. Теперь курсор указывает на первую строку в активном наборе.

Если запрос не возвращает ни одной строки, никакое исключение PL/SQL не возбуждается. Однако можно проверить статус курсора после выборки (FETCH).

3.Выборка данных курсора

Синтаксис

FETCH имя_ курсора INTO переменная1, переменная2, ...; где:

имя_ курсора имя ранее описанного курсора. переменная1,… выходная переменная для размещения

результата.

Команда FETCH используется для выборки значений из текущей строки в выходные переменные. После выборки можно работать с переменными с помощью других команд.

В предложение INTO команды FETCH включается столько же переменных, сколько столбцов возвращает команда SELECT с соответствующей совместимостью типов данных.

Между именами переменных и столбцами устанавливается позиционное соответствие.

Можно определить запись курсора (RECORD) и ссылаться на нее в предложении INTO.

Команда FETCH позволяет проверить, содержит ли курсор строки. Если команда FETCH не выбирает никаких значений, это значит, что в активном наборе не осталось необработанных строк и состояние ошибки не возникает.

4.Закрытие курсора

Синтаксис

CLOSE имя_ курсора;

где:

 

имя_ курсора

имя ранее описанного курсора.

По окончании обработки команды SELECT закройте курсор. При необходимости можно открыть курсор заново.

9

 

Атрибуты явного курсора

 

 

Атрибут

Описание

 

 

%ISOPEN

Логический атрибут, значение которого равно

 

TRUE ("истинно"), если курсор открыт

 

 

%NOTFOUND

Логический атрибут, значение которого равно

 

TRUE, если последняя команда

 

FETCH не вернула строку

 

 

%FOUND

Логический атрибут, значение которого равно

 

TRUE до тех пор, пока не окажется, что

 

последняя команда FETCH не вернула строку

 

 

%ROWCOUNT

Числовой атрибут, возвращающий количество

 

строк, выбранных на данный момент

 

 

Не ссылайтесь на атрибуты курсора прямо в команде SQL.

Управление многократной выборкой из явных курсоров

Обычно для обработки нескольких строк из явного курсора создается цикл, при каждом выполнении которого выбирается одна строка. В конце концов обрабатываются все строки активного набора, и в результате неудачной выборки атрибут %NOTFOUND принимает значение TRUE ("истинно"). Прежде чем ссылаться на курсор, проверяйте успех каждой выборки с помощью атрибутов явного курсора.

Выборка строк возможна только при открытом курсоре. Проверить, открыт ли курсор, можно с помощью атрибута %ISOPEN.

Пример. Подсчитать доход от всех фильмов.

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]