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

UDF'ler ve temel SQL

Şu ana kadar Node.js sunucusundan sorgular gönderiyoruz. Ancak düzinelerce farklı sorguda bir formül kullanılıyorsa (örneğin, KDV dahil nihai fiyatı hesaplamak), neden matematiği JavaScript'te kopyalayasınız ki? SQL İşlevleri (Kullanıcı Tanımlı İşlevler - UDF), veritabanının içinde "makrolar" oluşturmamıza olanak tanır.

Matematiksel bir SQL makrosunun nasıl oluşturulacağı aşağıda açıklanmıştır:

SQL
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
  SELECT price * 1.22;
$$ LANGUAGE sql;

Bu komut çalıştırıldığında işlev veritabanımızda sonsuza kadar yaşar. Herhangi bir sorgudan çağrılabilir:

SQL
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;

Dinamik oluşturma

Türlerini belirterek istediğimiz kadar değişken tanımlayabiliriz ve LANGUAGE sql sorguyu çalıştıracak ve $$ dolar işaretleri arasına yerleştirilen son ifadeyi örtülü olarak döndürecektir.

Kendin dene

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

İki TEXT parametresini ('first_name' TEXT, 'last_name' TEXT) kabul eden 'get_full_name' adında basit bir çağrılabilir işlev oluşturun.\nBir TEXT değeri döndürmesi gerekir.\nİçeride, iki bağımsız değişkeni aralarında tek bir boşluk olacak şekilde birleştiren önemsiz bir SELECT yapın ve bunu dil sql'si olarak bildirin.

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

FONKSİYONU OLUŞTURUN VEYA DEĞİŞTİRİN get_full_name(ad TEXT, soyadı TEXT) METİNİ $$ OLARAK DÖNÜR SELECT ad || '' || soy isim; $$ DİL sql;

3 denemeden sonra çözüm mevcut

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

Daha gelişmiş UDF'lerde sorguların tamamını gömebiliriz. Hiçbir parametre kabul etmeyen ve bir TAM SAYISI DÖNEN bir 'get_customer_count()' işlevi oluşturun.\nİçinde önemsiz bir 'SELECT COUNT(id) FROM customer' komutunu çalıştırın.\nBunu saf sql dili olarak bildirin.

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

Dikkat edin: COUNT bir bigint döndürür, dönüş türüyle eşleşmesi için onu INTEGER'a aktarın! FONKSİYONU OLUŞTURUN VEYA DEĞİŞTİRİN get_customer_count() INTEGER'I $$ OLARAK DÖNÜR, müşterilerden SELECT CAST(COUNT(id) AS INTEGER); $$ DİL sql;

3 denemeden sonra çözüm mevcut