SQL'de alt programlar iki türdedir:
CALL/EXEC ile çağrılır ve her zaman seçme katmanında kullanılmaz.Önemli:
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;
Stored procedure'ü doğrudan SELECT içinde kullanabilir miyiz?
Çoğu "evet" diye cevap verir ama bu yanlıştır.
Cevap:
EXEC/CALL) çağrılır, oysa fonksiyonlar SELECT içinde kullanılabilir.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).