Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_po_bd.docx
Скачиваний:
32
Добавлен:
26.09.2019
Размер:
126.45 Кб
Скачать

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] [ := начальноезначение ];

Типы данных

  1. Стандартные типы 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

  1. Пользовательские типы должны быть описаны до их использования с помощью конструкции

TYPE имятипа IS описаниетипа;

Особо следует сказать о новом составном типе - таблице PL/SQL. Этот тип по сути представляет собой неограниченный массив любого скалярного типа, элементы которого индексируются типом BINARY_INTEGER. Для доступа к таблице достаточно указать имя переменной-таблицы и индекс. Если элемент с указанным индексом не был помещен в таблицу, возбуждается исключительная ситуация NO_DATA_FOUND. Количество элементов, помещенных в таблицу, должно контролироваться программистом. Таблицы PL/SQL должны объявляться за два шага. Вначале объявляется тип TABLE, а затем создаются переменные этого типа. Для объявления таблицы используется следующий синтаксис:

TYPE имятипа IS TABLE OF базовыйтип

[NOT NULL] INDEX BY BINARY_INTEGER;

  1. Мы можем описывать тип переменной с помощью ссылочных атрибутов %TYPE и %ROWTYPE.

имяпеременной | таблицаБД,имястолбца %TYPE

Определяет тип новой переменной как такой же тип, что и у переменной, для которой записан этот атрибут.

таблицаБД %ROWTYPE

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

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

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