0Pricing
SQL Academy · Ders

PL/pgSQL İşlevlerinin Temelleri

Parametreler, RETURNS TABLE, denetim akışı (IF, LOOP, FOREACH) ve özel durum yönetimi içeren PL/pgSQL işlevleri yazın.

PL/pgSQL İşlevlerinin Temelleri, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.

PL/pgSQL Nedir

PostgreSQL'in yerleşik yordam dilidir. Değişkenler, denetim akışı, istisnalar ve sorguları dinamik olarak çağırma yeteneğiyle genişletilmiş SQL'dir. Saklı yordamlar ve tetikleyici işlevleri için kullanılır.

İşlev İskeleti

Basit bir işlev:

CREATE OR REPLACE FUNCTION add(a INT, b INT)
RETURNS INT AS $$
BEGIN
  RETURN a + b;
END;
$$ LANGUAGE plpgsql IMMUTABLE;

SELECT add(2, 3);   -- 5

Değişkenler

DECLARE ile tanımlayın; := veya INTO ile değer atayın:

CREATE FUNCTION user_orders(uid BIGINT)
RETURNS INT AS $$
DECLARE
  cnt INT;
BEGIN
  SELECT COUNT(*) INTO cnt FROM orders WHERE user_id = uid;
  RETURN cnt;
END;
$$ LANGUAGE plpgsql STABLE;

Denetim Akışı

IF / ELSE, FOR, WHILE, CASE:

IF cnt = 0 THEN
  RAISE NOTICE 'no orders';
ELSIF cnt < 10 THEN
  RAISE NOTICE 'few';
ELSE
  RAISE NOTICE 'many';
END IF;

FOR i IN 1..10 LOOP
  RAISE NOTICE '%', i;
END LOOP;

Sorgu Sonuçları Üzerinde Döngü

İmleç tarzı yineleme:

CREATE FUNCTION recalc_totals() RETURNS VOID AS $$
DECLARE
  r RECORD;
BEGIN
  FOR r IN SELECT id FROM users LOOP
    UPDATE users SET
      order_count = (SELECT COUNT(*) FROM orders WHERE user_id = r.id)
    WHERE id = r.id;
  END LOOP;
END;
$$ LANGUAGE plpgsql;

RETURNS TABLE

Bir sonuç kümesi döndürün:

CREATE FUNCTION top_buyers(n INT)
RETURNS TABLE (user_id BIGINT, total NUMERIC) AS $$
BEGIN
  RETURN QUERY
    SELECT o.user_id, SUM(o.total)
    FROM orders o
    GROUP BY o.user_id
    ORDER BY SUM(o.total) DESC
    LIMIT n;
END;
$$ LANGUAGE plpgsql STABLE;

SELECT * FROM top_buyers(10);

IN / OUT / INOUT Parametreleri

Birden çok dönüş değeri:

CREATE FUNCTION stats(uid BIGINT,
  OUT total NUMERIC,
  OUT cnt INT) AS $$
BEGIN
  SELECT SUM(total), COUNT(*) INTO total, cnt
  FROM orders WHERE user_id = uid;
END;
$$ LANGUAGE plpgsql STABLE;

SELECT * FROM stats(42);   -- total | cnt

İstisna İşleme

BEGIN ... EXCEPTION WHEN ... THEN:

BEGIN
  INSERT INTO users (email) VALUES ($1);
EXCEPTION
  WHEN unique_violation THEN
    RAISE NOTICE 'email already exists';
  WHEN OTHERS THEN
    RAISE;
END;

Günlükleme için RAISE

Düzeyler: DEBUG, LOG, INFO, NOTICE, WARNING, EXCEPTION:

RAISE NOTICE 'processed % rows', cnt;
RAISE EXCEPTION 'bad state: %', state USING ERRCODE = 'check_violation';

Değişkenlik Belirteçleri

İşlevleri planlayıcı için doğru şekilde işaretleyin:

  • IMMUTABLE — aynı bağımsız değişkenler her zaman → aynı sonuç (girdi/çıktı yok); satır içi kullanıma ve dizinlenebilir kullanıma olanak tanır
  • STABLE — aynı bağımsız değişkenler → bir query içinde aynı sonuç
  • VOLATILE — her çağrıda farklı olabilir (varsayılan; NOW(), RANDOM() için doğrudur)

SECURITY DEFINER

İşlev sahibinin yetkileriyle çalışır — dikkatli kullanın:

CREATE FUNCTION sensitive_op() RETURNS VOID
LANGUAGE plpgsql
SECURITY DEFINER
AS $$ ... $$;

-- Always set search_path explicitly to avoid hijacking:
ALTER FUNCTION sensitive_op() SET search_path = public, pg_temp;

Özet

PL/pgSQL, döngüler, IF, istisnalar ve yapılandırılmış dönüşlerle SQL'i genişletir. Verilere yakın çalışmaktan yararlanan, birbiriyle bağlantılı çok adımlı mantık için kullanın.

Hızlı Kontrol

Yan etkisi veya G/Ç işlemi olmayan ve aynı bağımsız değişkenler verildiğinde aynı sonucu döndüren bir işlev için hangi değişkenlik belirtecini kullanmalısınız?

Sıkça Sorulan Sorular

“PL/pgSQL İşlevlerinin Temelleri” dersi ücretsiz mi?

Evet — “PL/pgSQL İşlevlerinin Temelleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.

“PL/pgSQL İşlevlerinin Temelleri” dersinde ne öğreneceğim?

Parametreler, RETURNS TABLE, denetim akışı (IF, LOOP, FOREACH) ve özel durum yönetimi içeren PL/pgSQL işlevleri yazın. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

SQL Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“PL/pgSQL İşlevlerinin Temelleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Tetikleyici Anatomisi: BEFORE/AFTER, FOR EACH ROW
  2. PL/pgSQL İşlevlerinin Temelleri
  3. DO Blokları ve Anonim Kod
  4. Tabloları Tetikleyicilerle Denetleme
← SQL Academy Sayfasına Dön