Kom igångKom igång gratis

Flera undantagsblock

Eftersom ROLLBACK TO och SAVEPOINT inte kan användas i funktioner med undantagshanterare finns det ett sätt att efterlikna samma beteende med hjälp av nästlade block. Dessa nästlade block används för att gruppera och ordna satser i den ordning de är beroende av varandra. Här ska du infoga ett block med poster som har en undantagshanterare – vilket efterliknar en SAVEPOINT – och sedan uppdatera en post med en undantagshanterare. Uppdateringssatsen kommer att ge ett fel, och undantagshanteraren återställer automatiskt just det blocket.

Den här övningen är en del av kursen

Transaktioner och felhantering i PostgreSQL

Visa kurs

Övningsinstruktioner

  • I det första blocket infogar du följande poster i patients (a1c=5.6, glucose=93, och fasting=TRUE), (6.3, 111, TRUE) (4.7, 65, TRUE) med en EXCEPTION-hanterare som infogar 'failed to insert' som msg i errors-tabellen.
  • Öppna ett andra nästlat block och uppdatera patienten med ID 1 så att fasting får värdet 'true', med undantagshantering som loggar till tabellen errors med msg 'Inserted string into boolean.'.
  • Avsluta båda blocken med END.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

-- 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;
Redigera och kör kod