Опубликован: 02.08.2007 | Уровень: специалист | Доступ: платный
Лекция 12:

Разработка серверного кода

Аннотация: В данной лекции рассматриваются вопросы, связанные с решением задачи разработки серверного кода - триггеров, функций, хранимых процедур и пакетов. Серверный код является одним из важных объектов реляционной базы данных в многопользовательских информационных системах.
Ключевые слова: проектирование баз данных, централизованные вычисления, сеть, распределенные вычисления, СУБД, доступ, концентраторы, SQL, производительность, приложение, ПО, запрос, ядро, вычисленное значение, базы данных, Oracle, операции, создание базы данных, сервер, создание хранимой процедуры, создание функций, создание триггера, определенные пользователем типы данных, REM, операторные скобки, CBA, BCA, FETCH, %NOTFOUND, выборка из курсора, открытие курсора, %ROWCOUNT, универсальный алгоритм, блок объявлений, тело процедуры, создание процедур, associative operation, overload, декларативный язык, создание серверного кода, глобальные переменные, компиляция, package, объект, спецификация пакета, интерфейс, переменная курсора, синтаксис, ключевое слово, сообщение об ошибке, обращение к функции, инициализация, переменная, CNT, администратор баз данных, константы, имя пакета, освобождение ресурсов, команда, принятия решений, пользователи базы данных, триггер, database trigger, таблицы событий, ссылочная целостность, поддержка, ограничение целостности, пользователь, виртуальная таблица, определение, имя таблицы, множества, WHERE, значение, условия поиска, область действия, OLD, new, тип триггера, изменение записей, список, контроль, схема базы данных, таблица, оператор INSERT, код ошибки, ALTER TABLE, удаление триггера, DROP, хранимая процедура

Введение

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

В многопользовательских системах пользователи совместно используют вычислительные ресурсы, в частности ресурсы дисковой памяти и оперативной памяти процессора. Вычислительные ресурсы могут быть сконцентрированы в одном месте (централизованные вычисления) или быть рассредоточенными в различных узлах, объединенных в компьютерную сеть (распределенные вычисления). СУБД в любом случае призвана координировать и осуществлять доступ пользователей к базам данных и их объектам.

Большинство современных СУБД поддерживают концепцию клиент- серверной технологии для распределенных вычислений. Это означает, что существуют концентраторы вычислений (называемые серверами), на которых выполняется наибольший объем вычислений с данными (серверы баз данных), и машины пользователей (клиенты), на которых выполняются приложения пользователей.

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

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

Работа приложения по последней схеме основывается на использовании так называемого серверного кода (server-side code) - любого кода, выполняемого компьютером, на котором установлена СУБД. Ядро СУБД выполняет этот код в базе данных и возвращает приложению только результат. Например, это может быть несколько колонок строки или вычисленное значение.

Использование серверного кода может значительно сократить объем сетевого трафика, и тем самым увеличить производительность базы данных в целом. Однако СУБД должна иметь встроенные средства для распознавания и обработки такого кода. Многие фирмы-производители промышленных СУБД, в том числе и Oracle, предлагают процедурные расширения SQL, с помощью которых можно выполнять построчную обработку данных, использовать циклы, сложные вычисления и операции управления данными.

PL/SQL является таким расширением SQL в СУБД Oracle. Он позволяет создавать серверный код в виде объектов реляционной базы данных, таких, как хранимые процедуры, функции, пакеты и триггеры. Проектировщик реляционной базы данных, который использует для создания базы данных СУБД Oracle, имеет возможность рассмотреть создание таких объектов с целью сокращения сетевого трафика или принять решение о переносе определенного объема обработки на сервер, особенно в тех случаях, когда эта обработка выполняется очень интенсивно. Например, несколько строк разных таблиц проверяются перед вставкой новой строки.

Таким образом, разработка серверного кода сводится к решению следующих подзадач:

  • принятие решения и создание хранимых процедур;
  • принятие решения и создание функций;
  • принятие решения и создание пакетов;
  • принятие решения и создание триггеров.

PL/SQL - процедурное расширение языка SQL

Структура программы на PL/SQL

Модельным прототипом для создания языка PL/SQL послужил язык программирования ADA, поэтому он обладает набором средств, характерных для любого современного языка программирования. Всякая программа на PL/SQL состоит из трех блоков: блока описаний, блока исполняемого кода и блока обработки исключительных ситуаций. Блок исполняемого кода может быть структурирован с помощью операторных скобок BEGIN … END.

Синтаксически программа на PL/SQL оформляется следующим образом:

DECLALE
	Описание переменных и констант
BEGIN
	Операторы
EXCEPTION
	Операторы
END;

Перед блоком DECLALE могут располагаться команды установки переменных окружения. В блоке DECLALE описываются константы, переменные и определенные пользователем типы данных. Первый оператор BEGIN отмечает начало тела основной программы. В тело программы могут быть включены другие блоки, ограниченные операторными скобками. Блок EXCEPTION определяет фрагменты программного кода для обработки исключительных ситуаций в программе. Последний оператор END указывает конец тела программы. В любые части программы могут быть включены комментарии, т.е. текст, который начинается с символов -- и продолжается до конца текущей строки. Строка, начинающаяся с ключевого слова REM, также рассматривается как комментарий.

Константы, переменные и типы в PL/SQL

Переменная или константа определяется своим именем, которое является допустимым именем в СУБД Oracle. Любая константа или переменная должна иметь один из допустимых в СУБД Oracle типов. Константа идентифицируется ключевым словом CONSTANT и отличается от переменной тем, что попытка изменить ее значение в программе приведет к ошибке.

Для определения констант и переменных используется следующий синтаксис:

Имя [CONSTANT] тип данных [:= значение];

Пример. Рассмотрим пример простой программы, которая вычисляет значение синуса двух углов, кратных p.

-- переменные окружения
set serveroutput on;
set echo on;
DECLARE
Pi CONSTANT real :=3.14;
x real :=1;
BEGIN
DBMS_OUTPUT.PUT_LINE ('y ='|| sin(Pi*x));
x:=x+1;
DBMS_OUTPUT.PUT_LINE ('y ='|| sin(Pi*x));
END;
/

Установка переменных окружения определяет режим вывода на терминал пользователя. Системная процедура DBMS_OUTPUT.PUT_LINE обеспечивает вывод данных на терминал. Символ / указывает на завершение текста программы и является командой к выполнению программы.

Александра Каева
Александра Каева
Михаил Забелкин
Михаил Забелкин
Евгений Вершинин
Евгений Вершинин
Россия, Нижний Новгород, Нижегородский государственный технический университет, 2008
Aleksandr Arshinskyi
Aleksandr Arshinskyi
Россия