PL/SQL – это процедурный язык в SQL (Procedural Language/SQL). PL/SQL расширяет SQL конструкциями, присутствующими в процедурных языках программирования. Основная единица программы PL/SQL это блок. Все программы PL/SQL состоят из блоков, которые могут быть вложены друг друга. Обычно, каждый блок соответствует какой-либо логической единице программы. Блок имеет следующую структуру:
- DECLARE
- /* Раздел описания: переменных, типов и подпрограмм. */ BEGIN
- /* Раздел выполняемого кода: команды процедурного и SQL языков. */
- /* Это единственный обязательный раздел */
- EXCEPTION
- /* Раздел обработки исключительных ситуаций: команды обработки ошибок. */ END;
Обязательным является только раздел выполняемого кода, все остальные – не обязательны.
В разделе выполняемого кода PL/SQL программы могут присутствовать только некоторые команды SQL. Это команды SELECT, INSERT, UPDATE, DELETE и несколько других команд обработки данных и управления транзакциями. Однако команда SELECT имеет специальный формат, в котором для размещения элементов строки используются переменные памяти. Команды определения данных, такие как CREATE, DROP или ALTER, в PL/SQL использовать нельзя. Выполняемый раздел может также содержать команды присваивания, ветвления, циклов, вызовов процедур и триггеров. PL/SQL не чувствителен к регистру. Комментарии стиля C (/* ... * /) допустимы.
В обработчик WHEN OTHERS попадает любое необработанное исключение. Чтобы выяснить причину возникшего исключения можно воспользоваться функциями
SQLCODE - возвращает числовой код исключения (тип данных NUMBER) и SQLERRM - возвращает символьное сообщение об исключении, связанное с заданным кодом исключения.
Примеры кодов, возвращаемых функцией SQLCODE:
- 0 Никаких исключений не возникло.
- 1 Пользовательское исключение.
- 100 исключение NO_DATA_FOUND.
- отрицательное число Другое исключение Oracle.
Имея код исключения и сообщение, можно решить, что делать с этим исключением дальше.
Для перехвата не предопределённого исключения, возбуждаемого сервером, необходимо сначала объявить его и связать со стандартной ошибкой Oracle, затем в секции обработки исключений к нему можно ссылаться по объявленному имени.