- •Общая характеристика субд Access. Создание и редактирование базы данных средствами субд Access. Свойства реляционной таблицы. Отношения между таблицами.
- •9Структуру стандарта sql.Типы данных и операции , агрегирующие функции. Примеры.
- •19 Администрирование бд и управление объектами. Разграничение доступа. Привилегии, роли
- •20 Управл парал-ной обработкой данных. Блокировки
- •13 Общая концепция субд Oracle
- •15.Курсоры , их атрибуты. Использования цикла for при работе с курсорами.
- •18.Триггеры.Объявление, назначение и примеры использования. Модификация триггеров.
- •16.Обработка исключений.Пользовательские исключения.Возбуждение исключений.
- •Возбуждение исключений
- •3. По аналогии с левым можно определить правое внешнее соединение. Перепишем предыдущий пример с использованием его возможностей:
- •Модификация данных
- •Модификация объектов базы данных
- •Создание таблиц. Ограничения
- •Последовательности
- •Модификация и удаление таблиц
- •Представления
- •14. Язык pl/sql. Основные типы данных и операторы
- •Структура программы
- •Идентификаторы и описания переменных
- •Типы данных
- •Процедурные операторы
- •Особенности записи операторов sql
- •17.Подпрограммы. Хранимые подпрограммы. Пакеты.
- •Хранимые подпрограммы
14. Язык pl/sql. Основные типы данных и операторы
Язык SQL по своей природе является непроцедурным языком. Иными словами, с помощью его операторов мы говорим, что мы желаем получить, но не указываем, как нам необходимо это сделать.
Язык PL/SQL (Procedural Language/SQL) — изобретение фирмы Oracle – объединяет мощь и гибкость SQL и обычные процедурные конструкции(т.е.может выполнить какие-то программы и на стороне сервера).
PL/SQL включает следующие средства:
объявления переменных и типов, в том числе определяемых пользователем;
операторы присваивания;
проверки условий и ветвления;
интерактивные конструкции;
строгие правила определения области видимости переменных;
параметризованные вызовы процедур;
средства для создания пакетов данных и функций;
контроль типов на этапах компиляции и выполнения;
неявные преобразования типов;
обработчик исключительных ситуаций;
объектные типы и методы.
PL/SQL хорошо интегрирован с SQL и легко переносим, поскольку стандартизован для всех серверов Oracle на различных платформах. Его типы базируются на типах данных серверов, поэтому PL/SQL является полностью машинно-независимым, и программа, написанная на языке PL/SQL, может быть откомпилирована и выполнена на любом сервере фирмы Oracle без модификаций.
С другой стороны, поскольку программы на PL/SQL выполняются, как правило, на стороне сервера, в этом языке отсутствуют развитые средства диалога с пользователем.
Структура программы
Базовой единицей программы, написанной на PL/SQL, является блок. Виды блоков:
анонимные блоки;
именованные блоки, которые отличаются от анонимных наличием меток, являющихся именами блоков;
подпрограммы – процедуры, функции и модули (пакеты), хранящиеся в БД и выполняемые посредством инструкции вызова;
триггеры - именованные блоки, хранящиеся в БД и выполняющиеся неявно при наступлении соответствующих событий. Событием, вызывающим активизацию триггера, является, например, оператор DML (INSERT, UPDATE, DELETE), выполненный над таблицей БД, с которой связан триггер. Пример анонимного блока.
DECLARE
[ разделобъявлений ]
BEGIN
выполняемыйраздел
[ EXCEPTION
разделисключительныхситуаций ]
END;
В разделе объявлений размещаются все переменные, курсоры и типы, используемые данным блоком, а также локальные процедуры и функции, доступные в пределах только данного блока.
В выполняемом разделе могут содержаться как процедурные операторы, так и операторы SQL. Наличие этого раздела является обязательным; он по крайней мере должен содержать оператор NULL.
В разделе исключительных ситуаций обрабатываются ошибки. Если в процессе выполнения блока не возникло ошибок, то код, содержащийся в этом разделе, не выполняется.
Идентификаторы и описания переменных
Описания локальных переменных имеют вид
имяпеременной типпеременной [CONSTANT] [NOT NULL] [ := начальноезначение ];
Типы данных
Стандартные типы PL/SQL описаны в следующей таблице:
Числовые |
Символьные |
Типы без обработки |
Временной тип |
Тип ROWID |
Логический |
Составные типы |
BINARY_ INTEGER DEC DECIMAL DOUBLE PRECISION FLOAT INT INTEGER NATURAL NATURALN NUMBER NUMERIC PLS_INTEGER POSITIVE POSITIVEN REAL SIGNTYPE SMALLINT |
CHAR CHARACTER LONG NCHAR NVARCHAR2 STRING VARCHAR2 VARCHAR |
RAW LONG RAW |
DATE |
ROWID |
BOOLEAN |
RECORD VARRAY TABLE |
Пользовательские типы должны быть описаны до их использования с помощью конструкции
TYPE имятипа IS описаниетипа;
Особо следует сказать о новом составном типе - таблице PL/SQL. Этот тип по сути представляет собой неограниченный массив любого скалярного типа, элементы которого индексируются типом BINARY_INTEGER. Для доступа к таблице достаточно указать имя переменной-таблицы и индекс. Если элемент с указанным индексом не был помещен в таблицу, возбуждается исключительная ситуация NO_DATA_FOUND. Количество элементов, помещенных в таблицу, должно контролироваться программистом. Таблицы PL/SQL должны объявляться за два шага. Вначале объявляется тип TABLE, а затем создаются переменные этого типа. Для объявления таблицы используется следующий синтаксис:
TYPE имятипа IS TABLE OF базовыйтип
[NOT NULL] INDEX BY BINARY_INTEGER;
Мы можем описывать тип переменной с помощью ссылочных атрибутов %TYPE и %ROWTYPE.
имяпеременной | таблицаБД,имястолбца %TYPE
Определяет тип новой переменной как такой же тип, что и у переменной, для которой записан этот атрибут.
таблицаБД %ROWTYPE
дает возможность определить переменную–запись, структура которой совпадает со структурой указанной таблицы.
Правила преобразования типов в PL/SQL значительно более свободны, нежели в других языках программирования. Этот язык дает возможность неявного преобразования типов. Так, мы можем присвоить числовой переменной значение выражения строкового типа, и при этом максимум, что может произойти – ошибка выполнения при несоответствии содержимого строки одному из числовых форматов. Тем не менее, этой возможностью надо пользоваться с осторожностью, поскольку мы можем получить непредсказуемые результаты.