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
Petunjuk latihan
- Pada blok pertama, sisipkan record berikut ke dalam
patients(a1c=5.6,glucose=93, danfasting=TRUE),(6.3, 111, TRUE)(4.7, 65, TRUE)dengan penanganEXCEPTIONyang menyisipkan'failed to insert'sebagaimsgke dalam errors. - Buka blok bersarang kedua dan perbarui pasien dengan ID 1 agar memiliki nilai
fasting'true'dengan penanganan pengecualian yang mencatat ke tabelerrorsdenganmsg'Inserted string into boolean.'. ENDkedua 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;