SQL Academy · leksjon

DO-blokker og anonym kode

Kjør PL/pgSQL ad hoc med DO-blokker, håndter dollartegnsanførsel, og bruk DO-blokker til engangsmigreringer.

Leksjon 3 av 413 trinn

DO-blokker og anonym kode er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i SQL Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i SQL Academy inneholder totalt 4 leksjoner.

Hva er en DO-blokk?

En DO-blokk lar deg kjøre PL/pgSQL uten å definere en navngitt funksjon. Den er perfekt for engangsmigreringer og ad hoc-skript.

Grunnleggende DO-blokk

Minimal syntaks:

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 $$;

Dollar-quoting

Skilletegnet $$ gjør at du slipper å escape enkle anførselstegn. Du kan bruke en tagg for nøstet kode:

DO $outer$
BEGIN
  EXECUTE $inner$ SELECT 'embedded \'quotes\'' $inner$;
END;
$outer$;

Betinget DDL

Legg til en kolonne bare hvis den ikke finnes:

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 $$;

Løkker for bulkmigrering

Oppdater en enorm tabell i puljer:

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 $$;

Dynamisk SQL med EXECUTE

Bygg SQL-strenger på en trygg måte med format() og 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 $$;

Transaksjonskontroll i DO

Eldre PG: En DO-blokk kjører i én enkelt implisitt transaksjon. PG 11+ tillater COMMIT/ROLLBACK i prosedyrer (CALL), men ikke i DO. For puljevise migreringer med commits bruker du en prosedyre.

Prosedyrer kontra DO

  • DO – anonym, kjøres én gang, i gjeldende transaksjon
  • PROCEDURE – navngitt, støtter COMMIT/ROLLBACK, kalles via CALL
CREATE PROCEDURE migrate_users() LANGUAGE plpgsql AS $$
BEGIN
  -- can COMMIT here
END $$;

CALL migrate_users();

Feilhåndtering

EXCEPTION-blokker fungerer på samme måte som i navngitte funksjoner:

DO $$
BEGIN
  ...
EXCEPTION
  WHEN OTHERS THEN
    RAISE NOTICE 'failed: %', SQLERRM;
END $$;

Ikke bruk DO til gjentatte oppgaver

Hvis du skal kjøre den samme logikken mer enn én gang, definerer du en funksjon eller prosedyre. DO er beregnet på engangskjøringer.

Bruk DO i migreringer

De fleste migreringsverktøy (Flyway, Sqitch) kjører vanlig SQL. DO-blokker lar deg bygge inn kontrollflyt uten separate funksjoner.

Oppsummering

DO-blokker er ad hoc-PL/pgSQL.

  • Én anonym kjøring
  • Flott for betinget DDL og migreringer
  • Vær oppmerksom på dollar-quoting
  • Bruk PROCEDURE for transaksjonskontroll

Kort kontroll

Du vil kjøre PL/pgSQL én gang under en migrering uten å opprette en navngitt funksjon. Hvilken konstruksjon bruker du?

Gratis å komme i gang

Lær deg SQL med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
46
Leksjoner
183

Ofte stilte spørsmål

Er leksjonen «DO-blokker og anonym kode» gratis?

Ja – hele teksten i «DO-blokker og anonym kode» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av SQL Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i SQL Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «DO-blokker og anonym kode»?

Kjør PL/pgSQL ad hoc med DO-blokker, håndter dollartegnsanførsel, og bruk DO-blokker til engangsmigreringer. Du øver på SQL Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med SQL Academy?

Ingen tidligere erfaring er nødvendig. SQL Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «DO-blokker og anonym kode»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne SQL Academy-leksjonen?

Ja. Alle SQL Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Triggerens anatomi: BEFORE/AFTER, FOR EACH ROW
  2. Grunnleggende om PL/pgSQL-funksjoner
  3. DO-blokker og anonym kode
  4. Revisjon av tabeller med triggere
← Tilbake til SQL Academy