■ Таблицы создаются при помощи оператора CREATE TABLE.
■ Последовательность генерирует ряд целых чисел.
■ Индекс базы данных может ускорить доступ к строкам.
■ Представлением называется предопределенный запрос к одной или
нескольким таблицам.
■ Архив ретроспективных данных хранит изменения, выполненные
в таблице в течение некоторого промежутка времени.
В следующей главе вы ознакомитесь с программированием на PL/SQL.
Глава 11
Знакомство
с программированием
на PL/SQL
Вы можете использовать PL/SQL для добавления бизнес-логики в приложение
базы данных. Этот централизованный код может быть вызван
любой программой, которая имеет доступ к базе данных, включая SQL1 Plus
и программы на С#, Java и т. п.
Примечание Подробное описание того, как получить доступ к базе данных через Java, можно
найти в моей книге 0racle9i JDBC Programming (OraclePress, 2002). За сведениями о том, как
обращаться к базе данных посредством С#, обратитесь к моей книге Mastering С# Database
Progranning (Sybex, 2003).
Блочная структура
Программы на PL/SQL делятся на структуры, известные как блоки, причем
каждый блок содержит операторы PL/SQL и SQL. Типичный блок
PL/SQL имеет следующую структуру:
П [DECLARE
операторы_объявления
] BEGIN
выполняемые_операторы
[EXCEPTION
операторы_обработки_исключительных_ситуаций
] END;
/
где
■ операторы_объявления объявляют переменные, которые впоследствии
будут использованы в оставшейся части PL/SQL блока. Блоки
DECLARE являются необязательными;
■ выполняемые_операторы являются выполняемыми операторами
блока, к числу которых могут относиться операторы циклов, условной
логики и т. п;
■ операторы_обработки_исключительных_ситуаций являются операторами,
которые обрабатывают любую ошибку, которая может возникнуть
в результате работы блока. Блоки EXCEPTION являются необязательными.
Каждый оператор заканчивается точкой с запятой (;), а сам блок заканчивается
символом прямого слэша (/). Перед тем, как перейти к подробному
Знакомство с программированием на PL/SQL 355
рассмотрению PL/SQL, вы увидите простой пример, позволяющий получить
представление о языке. В приведенном ниже примере кода (содержится
в сценарии v_area_example.sql в папке SQL) вычисляется ширина
прямоугольника по известным площади и высоте:
□ SET SERVEROUTPUT ON
DECLARE
v_width INTEGER;
v_height INTEGER := 2;
v_area INTEGER := 6;
BEGIN
-- устанавливаем ширину равной площади, делённой на высоту
v_width := v_area / v_height;
DBMS_OUTPUT.PUT_LINE('v_width = ' |l v_width);
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('Division by z e ro ');
END;
/
Команда SET SERVEROUTPUT ON включает вывод с сервера, таким образом,
вы сможете увидеть на экране строки, генерируемые DBMS_OUTPUT. PUT_
LINE(), при запуске сценария в SQITPlus. Вслед за этой начальной командой
идёт сам блок PL/SQL, который разбит на блоки DECLARE, BEGIN и
EXCEPTION.
Блок DECLARE содержит объявления трёх переменных типа INTEGER: v_
width, v_height и v_area (я всегда помещаю v_ в начале имени переменной).
Переменная vjheight при объявлении инициализируется значением 2, а
переменная v_area устанавливается на 6.
Затем следует блок BEGIN, который содержит три строки. Первая строка
является комментарием, который содержит текст «устанавливаем ширину
равной площади, делённой на высоту». Во второй строке вычисляется
значение переменной v_width путем деления v_area на v_height; это
означает, что v_width становится равной 3 (6 / 2). В третьей строке вызов
метода DBMSJDUTPUT. PUT_LINE() выводит на экран значение, установленное
для переменной v_width. Пакет DBMS_OUTPUT является встроенным пакетом
кода, который поставляется вместе с базой данных Oracle; помимо прочего,
DBMS_OUTPUT содержит процедуры, которые осуществляют вывод значений
на экран.
Блок EXCEPTION обрабатывает любые попытки деления числа на 0. Он
делает это, перехватывая исключительную ситуацию ZER0_DIVIDE. В данном
примере реально не происходит попыток деления на 0, но если изменить
значение v_height на 0 и выполнить программу, то можно увидеть,
что возникло исключение.
В самом конце сценария символ прямого слэша (/ ) отмечает конец блока
PL/SQL.
Следующий листинг показывает результат исполнения сценария агеа_
example.sql в SQIfPlus:
□ SQL> @ C:\SQL\area_example.sql
v_width = 3
356 Глава 11
Примечание Если ваш сценарий area_example.sql находится в другой папке, укажите путь к
этой папке в предыдущей команде.
Переменные и типы
Переменные объявляются внутри секции DECLARE блока PL/SQL. Как видно