Данная статья – первая в цикле о языке программирования PL/SQL, использующегося для работы с базами данных Oracle. Мы рассмотрим:
- Язык PL/SQL
- PL/SQL Block
- Package and Triggers
- Переменные
- Типы переменных
- Правила именования переменных
Язык PL/SQL
SQL является декларативным языком программирования, а это в свою очередь накладывает определенные ограничения на него. В частности нет прямой поддержки циклов. Преимуществом является простота и слабые требования к мощности сервера. Длительное время чистого sql хватало для работы с данными, но с ростом мощности серверов (увеличение процессоров, оперативной памяти, кэш-памяти и т.д.) стало понятно, что многие операции для работы с данными, можно выполнять еще на уровне базы данных. Для этой цели компания Oracle, разработала язык программирования PL/SQL (Procedural Language/SQL), который является надстройкой над языком SQL. Это дает возможность использовать чистый sql в pl/sql.
PL/SQL Block
Блок pl/sql выглядит следующим образом:
1 2 3 4 5 6 7 |
DECLARE .... BEGIN .... EXCEPTION .... END; |
DECLARE – секция, в которой описываются переменные, курсоры, исключения и другие параметры.
Секция является опциональной, это значит, что она может отсутствовать, если нет необходимости описывать переменные.
BEGIN … END. Основной блок PL/SQL, в котором пишутся SQL – запросы и PL/SQL.
EXCEPTION – так же является опциональным, указывается в случае необходимости перехвата исключений. Очень похоже на обработку исключений в языке Java.
Описаный выше блок pl/sql является анонимным. Так же PL/SQL дает возможность описать блоки PROCEDURE и FUNCTION. Разберем кратко каждый из них.
Anonymous (анонимный)
- не сохраняется на стороне сервера
- из названия понятно, что не имеет имени
- компилируется каждый раз при вызове
- не хранится в базе данных
- нет возможности вызвать из других приложений
- не имеет входящих параметров
- не возвращает значения.
Procedure (процедуры)
1 2 3 4 5 6 7 8 |
PROCEDURE name ( -- parameters ) IS ... BEGIN ... END name; |
- Хранится на стороне сервера
- Именованная
- Компилируетя один раз
- хранится в базе данных
- есть возможность обращаться из других приложений
- может принимать входящие параметры
- не возвращает значения
ЗЫ. Что касается последнего пункта, то процедура может возвращать значения в входящих параметрах, помеченных как OUT.
Function ( функции)
1 2 3 4 5 6 7 |
FUNCTION name ( -- parameters ) RETURN value IS BEGIN ... end name; |
Все пункты для процедур верны и для функций, за исключений того, что функции явно возвращают значения. Если вы пишите на Java, то функции – всегда не void.
Package and Triggers
Помимо процедур, PL/SQL дает возможность использовать дополнительные возможности в виде пакетов (package) и триггеров (triggers).
Package – позволяет объединить в себе несколько процедур и функций, к которым можно обращаться извне, указывая сочетание имя пакета + имя процедуры или функции:
1 |
package_name.procedure_name (); |
Trigger – блок, который срабатывает при наступлении определенного события ( обновление таблицы, занесение данных, наступлениям определенного времени и т.п) и выполняет действия с данными.
Подробнее о пакетах и триггерах мы поговорим в следующих статьях.
Переменные в PL/SQL
Название переменной ВСЕГДА должно начинаться с буквы. Как уже было сказано выше, описываем переменные в блоке DECLARE.
1 2 |
DECLARE v_loc VARCHAR2(30):= 'Igor Ivanovic'; |
Так же с помощью ключевого слова CONSTANT можно задать константу. Смысл такой же как и в других языках программирования. Константа не изменяется. В общем виде переменные объявляются так:
1 |
identifier [CONSTANT] datatype [NOT NULL] [:=DEFAULT expr]; |
В PL/SQL для переменной можно явно указать, что она не может быть NULL, а так же задать значение по умолчанию. Что касается NULL, то его смысл такой же как и в других языках – это пустота. В операторах =, <, > NULL всегда FALSE.
Типы переменных PL/SQL
В PL/SQL для разработчика предоставляются следующие типы переменных:
- Скаляр
- Ссылки
- LOB ( Large Object)
Правила наименования переменных
Правилом хорошего тона в присваивании имен переменных в pl/sql является добавление префикса перед названием. Это поможет избежать возможных совпадений имен, а так же явно указать на зону жизни или тип переменной, а так же облегчает чтение кода.
1 2 3 4 5 |
variable: v_name constant: c_name procedure: p_name function: f_name .... |
Следите за новыми статьями, в которых мы более подробно рассмотрим каждый аспект языка PL/SQL, тонкости работы и многое другое.