Blok DO dan Kode Anonim
Jalankan PL/pgSQL ad hoc dengan blok DO, kelola pengutipan dolar, dan gunakan blok DO untuk migrasi sekali jalan
Blok DO dan Kode Anonim adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Apa Itu Blok DO?
Blok DO memungkinkan Anda menjalankan PL/pgSQL tanpa mendefinisikan fungsi bernama. Cocok untuk migrasi sekali jalan dan skrip ad hoc.
Blok DO Dasar
Sintaks minimal:
DO $$
BEGIN
RAISE NOTICE 'Hello from PL/pgSQL';
END;
$$ LANGUAGE plpgsql;
-- The language defaults to plpgsql, so you can omit it:
DO $$ BEGIN RAISE NOTICE 'Hi'; END $$;Pengutipan Dolar
Pembatas $$ menghindari keharusan melakukan escape pada tanda petik tunggal. Anda dapat menggunakan tag untuk kode bertingkat:
DO $outer$
BEGIN
EXECUTE $inner$ SELECT 'embedded \'quotes\'' $inner$;
END;
$outer$;DDL Kondisional
Tambahkan kolom hanya jika kolom tersebut belum ada:
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name='users' AND column_name='last_login'
) THEN
ALTER TABLE users ADD COLUMN last_login TIMESTAMPTZ;
END IF;
END $$;Perulangan untuk Migrasi Massal
Perbarui tabel berukuran sangat besar secara berkelompok:
DO $$
DECLARE
rows_updated INT;
BEGIN
LOOP
UPDATE users SET tier = compute_tier(...)
WHERE id IN (
SELECT id FROM users WHERE tier IS NULL LIMIT 10000
);
GET DIAGNOSTICS rows_updated = ROW_COUNT;
EXIT WHEN rows_updated = 0;
COMMIT;
END LOOP;
END $$;SQL Dinamis dengan EXECUTE
Bangun string SQL dengan aman menggunakan format() dan EXECUTE:
DO $$
DECLARE
tbl TEXT;
BEGIN
FOR tbl IN SELECT tablename FROM pg_tables WHERE schemaname='public' LOOP
EXECUTE format('ANALYZE %I;', tbl);
END LOOP;
END $$;Kontrol Transaksi di Dalam DO
PG versi lama: blok DO berjalan di dalam satu transaksi implisit. PG 11+ mengizinkan COMMIT/ROLLBACK di dalam prosedur (CALL), tetapi tidak di dalam DO. Untuk migrasi berkelompok dengan commit, gunakan prosedur.
Prosedur vs DO
- DO — anonim, dijalankan sekali, dalam transaksi saat ini
- PROCEDURE — bernama, mendukung COMMIT/ROLLBACK, dipanggil melalui CALL
CREATE PROCEDURE migrate_users() LANGUAGE plpgsql AS $$
BEGIN
-- can COMMIT here
END $$;
CALL migrate_users();Penanganan Kesalahan
Blok EXCEPTION bekerja sama seperti pada fungsi bernama:
DO $$
BEGIN
...
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE 'failed: %', SQLERRM;
END $$;Jangan Gunakan DO untuk Tugas Berulang
Jika Anda akan menjalankan logika yang sama lebih dari sekali, definisikan fungsi atau prosedur. DO ditujukan untuk penggunaan sekali.
Gunakan DO dalam Migrasi
Sebagian besar alat migrasi (Flyway, Sqitch) menjalankan SQL biasa. Blok DO memungkinkan Anda menyisipkan alur kontrol tanpa fungsi terpisah.
Ringkasan
Blok DO adalah PL/pgSQL ad hoc.
- Satu kali dijalankan secara anonim
- Cocok untuk DDL kondisional dan migrasi
- Perhatikan pengutipan dolar
- Untuk kontrol transaksi, gunakan PROCEDURE
Cek Cepat
Anda ingin menjalankan PL/pgSQL sekali selama migrasi tanpa membuat fungsi bernama. Konstruksi apa yang harus digunakan?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Blok DO dan Kode Anonim” gratis?
Ya — teks lengkap “Blok DO dan Kode Anonim” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Blok DO dan Kode Anonim”?
Jalankan PL/pgSQL ad hoc dengan blok DO, kelola pengutipan dolar, dan gunakan blok DO untuk migrasi sekali jalan Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Blok DO dan Kode Anonim” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Anatomi Pemicu: BEFORE/AFTER, FOR EACH ROW
- Dasar-Dasar Fungsi PL/pgSQL
- Blok DO dan Kode Anonim
- Mengaudit Tabel dengan Pemicu