Ana içeriğe geç
Modül 12 · Ders 2 ders 4Kurstaki 46/57~15 min
Modül dersleri (2/4)

PL/pgSQL ile gelişmiş mantık

LANGUAGE sql ile yazılan işlevler yalnızca standart sorguları arka arkaya çalıştırabilir. "Girilen toplam 100'den büyükse O ZAMAN indirim uygulayın" gibi daha gelişmiş bir şeye ihtiyacımız varsa, basit SQL bunu kendi başına yapamaz. Postgres'te yerleşik, tam teşekküllü bir prosedür programlama dili olan PL/pgSQL kullanmamız gerekiyor.

PL/pgSQL'de BEGIN .. END, değişkenler ve koşullu ifadelerden oluşan klasik gövdeleri ekliyoruz.

SQL
CREATE OR REPLACE FUNCTION valuta_cliente(ordini INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF ordini > 10 THEN
    RETURN 'VIP';
  ELSE
    RETURN 'Standard';
  END IF;
END;
$$ LANGUAGE plpgsql;

Bu güç, normalde JS'de yazacağımız devasa tekrarlayan mantık bloklarını boşaltmamıza olanak tanır ve bunları verilere yakın olarak çok düşük gecikmeyle yürütülen güvenli, hızlı işlevlere paketler!

Kendin dene

Egzersiz#sql.m12.l2.e1
Denemeler: 0Yükleniyor…

Zaten mevcutsa kendisini değiştiren ('get_price_label'), 'fiyat'ı NUMERIC olarak kabul eden ve ayrıntılı bir TEXT döndüren karmaşık bir işlev istiyoruz.\nPL/pgSQL kullanın. BEGIN'i açın.\nMantığı yazın: fiyat > 100,00 ise 'Premium' dizesini döndürün. ELSE 'Economico'yu döndürür.\nKoşullu END'i kapatın; ve vücut.

Düzenleyici yükleniyor…
İpucu göster

FONKSİYONU OLUŞTURUN VEYA DEĞİŞTİRİN get_price_label(price SAYISAL) METNİ $$ OLARAK DÖNÜR, EĞER fiyat > 100,00 İSE 'Premium'u DÖNÜN; YOKSA 'Economico'ya DÖNÜŞ; EĞER SON; SON; $$ DİL plpgsql;

3 denemeden sonra çözüm mevcut

Egzersiz#sql.m12.l2.e2
Denemeler: 0Yükleniyor…

DECLARE anahtar sözcüğüyle BEGIN'den önce geçici değişkenler bildirebilirsiniz.\nBir 'saluta_utente(userid INTEGER)' işlevi yazın -> TEXT, PL/pgSQL mantığını döndürür.\nİçinde 'nome_utente TEXT;' dize değişkenini DECLARE yapın.\nSonra, BEGIN'in içinde, 'SELECT name_name INTO' özel yan tümcesini kullanarak 'müşterileri' dinamik olarak sorgulayarak bu değişkeni ilk_adla doldurun nome_utente FROM... NEREDE kimliği = kullanıcı kimliği'. Son olarak RETURN, değişkeni 'Ciao' ile birleştirir.

Düzenleyici yükleniyor…
İpucu göster

nome_utente METİNİ BEYAN EDİN; \nBEGIN name_utente INTO name_name SEÇİN... \nRETURN 'Ciao ' || nome_utente;

3 denemeden sonra çözüm mevcut