MulaiMulai sekarang secara gratis

Beberapa blok pengecualian

Karena ROLLBACK TO dan SAVEPOINT tidak dapat digunakan dalam fungsi dengan penangan pengecualian, kita dapat meniru perilaku yang sama menggunakan blok bersarang. Blok-blok ini digunakan untuk mengelompokkan dan mengurutkan pernyataan sesuai urutan ketergantungannya. Di sini Anda akan menyisipkan sekumpulan record dengan penangan pengecualian yang meniru SAVEPOINT, lalu memperbarui sebuah record dengan penangan pengecualian. Pernyataan update tersebut akan menghasilkan error, dan penangan pengecualian akan otomatis melakukan rollback hanya pada blok itu saja.

Latihan ini adalah bagian dari kursus

Transaksi dan Penanganan Error di PostgreSQL

Lihat Kursus

Petunjuk latihan

  • Pada blok pertama, sisipkan record berikut ke dalam patients (a1c=5.6, glucose=93, dan fasting=TRUE), (6.3, 111, TRUE) (4.7, 65, TRUE) dengan penangan EXCEPTION yang menyisipkan 'failed to insert' sebagai msg ke dalam errors.
  • Buka blok bersarang kedua dan perbarui pasien dengan ID 1 agar memiliki nilai fasting 'true' dengan penanganan pengecualian yang mencatat ke tabel errors dengan msg 'Inserted string into boolean.'.
  • END kedua blok.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

-- 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;
Edit dan Jalankan Kode