Začněte nyníZačněte zdarma

Více bloků výjimek

Protože ROLLBACK TO a SAVEPOINT nelze použít ve funkcích s obslužnými rutinami výjimek, existuje způsob, jak toto chování emulovat pomocí vnořených bloků. Tyto vnořené bloky slouží k seskupení a seřazení příkazů podle jejich vzájemných závislostí. V tomto cvičení vložíš skupinu záznamů s obslužnou rutinou výjimek, která emuluje SAVEPOINT, a poté aktualizuješ záznam s obslužnou rutinou výjimek. Příkaz pro aktualizaci skončí chybou a obslužná rutina výjimek automaticky provede rollback pouze tohoto bloku.

Toto cvičení je součástí kurzu

Transakce a ošetření chyb v PostgreSQL

Zobrazit kurz

Pokyny k cvičení

  • V prvním bloku vlož do tabulky patients následující záznamy (a1c=5.6, glucose=93, fasting=TRUE), (6.3, 111, TRUE), (4.7, 65, TRUE) s obslužnou rutinou EXCEPTION, která do tabulky errors vloží 'failed to insert' jako hodnotu sloupce msg.
  • Otevři druhý vnořený blok a aktualizuj pacienta s ID 1 tak, aby měl hodnotu fasting nastavenou na 'true', s obslužnou rutinou výjimek, která do tabulky errors zaznamená msg s hodnotou 'Inserted string into boolean.'.
  • Uzavři oba bloky pomocí END.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

-- 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;
Upravit a spustit kód