0Pricing
SQL Academy · Pelajaran

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

  1. Anatomi Pemicu: BEFORE/AFTER, FOR EACH ROW
  2. Dasar-Dasar Fungsi PL/pgSQL
  3. Blok DO dan Kode Anonim
  4. Mengaudit Tabel dengan Pemicu
← Kembali ke SQL Academy