Лабораторные работы по курсу «Базы данных»



Pdf көрінісі
бет41/46
Дата12.05.2023
өлшемі0,79 Mb.
#92097
түріПрактикум
1   ...   38   39   40   41   42   43   44   45   46
Пример 7.4: 
Использование цикла FOR в PL/pgSQL: 
CREATE FUNCTION extract_all_titles2 () RETURNS text AS '
DECLARE
-- Объявление переменной для кода темы.
sub_id integer:
-- Объявление переменной для хранения списка названий книг
text_output text = '' '';
-- Объявление переменной для названия темы.
sub_title text;
-- Объявление переменной для хранения записей.
-- полученных при выборке из таблицы books.
rowdata_books%ROWTYPE;
BEGIN
-- Внешний цикл FOR: тело цикла выполняется до тех пор.
-- пока переменная i не станет равна 15. Перебор начинается с 0.
-- Следовательно, тело цикла будет выполнено 16 раз
-- (по одному для каждой темы).
FOR i IN 0..15 LOOP
-- Получить из таблицы subjects название темы.
-- код которой совпадает со значением переменной i.
SELECT INTO subtitle subject FROM subjects WHERE id = i;
-- Присоединить название темы, двоеточие и символ новой строки
-- к переменной text_output.
text_output = text_output || ''\n'' || sub_title || '':\n'';
-- Перебрать все записи таблицы books.
--у которых код темы совпадает со значением переменной i. 
FOR row_data IN SELECT * FROM books WHERE subjected = i
LOOP
-- Присоединить к переменной text_output название книги
-- и символ новой строки.
text_output := text_output || row_data.title || ''\n'';
END LOOP;
END LOOP;
-- Вернуть список.
RETURN text_output;
END;
' LANGUAGE 'plpgsql'; 
Обработка ошибок и исключений 
Команда RAISE предназначена для инициирования ошибок и 
исключений в функциях PL/pgSQL. Она передает заданную информацию 
механизму PostgreSQL elog. В команде RAISE также указывается уровень 
ошибки и строка, передаваемая PostgreSQL. Кроме того, в команду можно 


включить переменные и выражения, значения которых будут содержаться в 
выходных данных. Соответствующие позиции строки помечаются знаками 
процента (%). Синтаксис команды RAISE:
RAISE уровень "сообщение" [. идентификатор [...] ]; 
Уровень ошибки может принимать следующие значения: DEBUG,
NOTICE, EXCEPTION. 
Для того, чтобы обработать исключение, возникшее в текущей 
транзакции (т.е. между BEGIN и END) необходимо записать следующую 
конструкцию: 
EXCEPTION 
WHEN код_исключения THEN 
 
команда; 
[WHEN код_исключения THEN 
 
команда;] 
На следующем примере 7.5 представлена функция, в теле которой 
обрабатываются два вида исключений: деление на ноль и взятие корня от 
отрицательного числа. Попробуйте создать эту функцию, а затем вызывайте 
ее с параметрами: 1, 0, -1. 


Достарыңызбен бөлісу:
1   ...   38   39   40   41   42   43   44   45   46




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет