ProgramlamaVeritabanı Geliştiricisi / DB Mimarı

SQL'de tekrar kullanılabilir iş mantığını uygulamak için alt programları (Prosedür/Fonksiyon) nasıl doğru bir şekilde oluşturur ve kullanırsınız ve parametreler ile döndürülen değerleri yönetmede hangi incelikler vardır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

SQL'de alt programlar iki türdedir:

  • Prosedürler (Stored Procedures): işlemleri gerçekleştirir (ekleme, güncelleme, silme), OUT parametreleri veya satır kümesi döndürebilir (SELECT ile). CALL/EXEC ile çağrılır ve her zaman seçme katmanında kullanılmaz.
  • Fonksiyonlar (Kullanıcı Tanımlı Fonksiyonlar, UDF): değer döndürür (skalar veya tablo), doğrudan SELECT, WHERE, ORDER BY ve diğer yapılar içinde kullanılabilir.

Önemli:

  • Prosedürler sıradan bir SELECT içinde kullanılamaz, sadece EXEC/CALL ile çağrılabilir.
  • Fonksiyonlar yalnızca bir değer (skalar) veya bir tablo (tablo fonksiyonları) döndürebilir ve herhangi bir ifadede kullanılabilir.
  • Parametreleri her zaman belgelendirin: IN (giriş için), OUT (sonucun döndürülmesi için), INOUT (iki yönlü).

Skalar bir fonksiyon örneği (PostgreSQL):

CREATE FUNCTION get_tax(amount NUMERIC, rate NUMERIC DEFAULT 0.13) RETURNS NUMERIC AS $$ BEGIN RETURN amount * rate; END; $$ LANGUAGE plpgsql; -- kullanım: SELECT *, get_tax(price) AS tax FROM product;

Hizmet edilen prosedür örneği (SQL Server):

CREATE PROCEDURE add_employee(@name NVARCHAR(100), @salary INT, @emp_id INT OUTPUT) AS BEGIN INSERT INTO employees (name, salary) VALUES (@name, @salary); SET @emp_id = SCOPE_IDENTITY(); END; DECLARE @id INT; EXEC add_employee 'John', 100000, @id OUTPUT;

Kandırıcı bir soru.

Stored procedure'ü doğrudan SELECT içinde kullanabilir miyiz?

Çoğu "evet" diye cevap verir ama bu yanlıştır.

Cevap:

  • Hayır: standart prosedürler yalnızca ayrı olarak (EXEC/CALL) çağrılır, oysa fonksiyonlar SELECT içinde kullanılabilir.

Konuyla ilgili incelikler nedeniyle gerçek hatalardan örnekler.


Hikaye

Proje: İlk kayıt sistemi, raporların uygulanması. Hata: Toplama hesaplamak için fonksiyon yerine prosedür yazıldı — SELECT çalışmadı, kullanıcı raporlarının tüm mantığını yeniden yazmak zorunda kaldık.


Hikaye

Proje: Dış parametrelerle ERP sistemi. Hata: Prosedür için OUT anahtarını ayarlamadık, bu nedenle müşteri eklenen kaydın ID'sini bilemedi, entegrasyon "bozuldu".


Hikaye

Proje: Farklı kurallara göre vergi hesaplamaları yapan finansal hizmet. Hata: Performans testi yapılmadan toplu bir sorguda skalar fonksiyon kullanıldı — sorgu, satır satır çağrı yaptığı için tablo işlenmesini yavaşlattı (optimize edilmemiş plan).