ПочатиПочніть безкоштовно

Кілька блоків обробки винятків

Оскільки ROLLBACK TO і SAVEPOINT не можна використовувати у функціях з обробниками винятків, ми можемо відтворити таку саму поведінку за допомогою вкладених блоків. Такі вкладені блоки дають змогу згрупувати оператори та впорядкувати їх залежно від послідовності виконання. Тут ви вставите групу записів із обробником винятків, який емулює SAVEPOINT, а потім оновите запис із власним обробником винятків. Під час оновлення виникне помилка, і обробник винятків автоматично відкотить лише цей блок.

Ця вправа є частиною курсу

Транзакції та обробка помилок у PostgreSQL

Переглянути курс

Інструкції до вправи

  • У першому блоці вставте до patients такі записи (a1c=5.6, glucose=93, і fasting=TRUE), (6.3, 111, TRUE) (4.7, 65, TRUE) з обробником EXCEPTION, який вставляє 'failed to insert' як msg до таблиці errors.
  • Відкрийте другий вкладений блок і оновіть пацієнта з ID 1, задавши fasting значення 'true', з обробкою винятків, яка записує до таблиці errors повідомлення msg = 'Inserted string into boolean.'.
  • Завершіть обидва блоки за допомогою END.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

-- Make a DO function
DO $$
-- Open a transaction block
BEGIN
    -- Open a nested block
    BEGIN
    	INSERT INTO ___ (___, ___, ___) 
        VALUES (5.6, 93, TRUE), ___, ___;
    -- Catch all exception types
    EXCEPTION WHEN others THEN
    	INSERT INTO ___ (msg) VALUES ('failed to insert');
    -- End nested block
    END;
    -- Begin the second nested block
	BEGIN
    	UPDATE patients SET ___ = '___' WHERE id=1;
    -- Catch all exception types
    EXCEPTION WHEN others THEN
        INSERT INTO errors (msg) VALUES ('Inserted ___ into ___.');
    -- End the second nested block
    END;
-- END the outer block
END;
$$ language 'plpgsql';
SELECT * FROM errors;
Редагувати та запускати код