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 merupakan bagian dari kursus
Transaksi dan Penanganan Error di PostgreSQL
Instruksi 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 langsung praktik
Cobalah latihan ini dengan melengkapi kode contoh ini.
-- 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;