SQL Server'daki işlevler, bir dizi içeren veritabanı nesneleridir. Belirli bir görevi gerçekleştirmek için kullanılan SQL ifadeleri kümesi . Bir işlev giriş parametrelerini kabul eder, eylemler gerçekleştirir ve ardından sonucu döndürür. Fonksiyonların her zaman tek bir değer veya tablo döndürdüğünü unutmamalıyız. Fonksiyonların temel amacı ortak görevi kolaylıkla çoğaltmaktır. İşlevleri bir kerelik oluşturabilir ve ihtiyaçlarımıza göre bunları birden fazla yerde kullanabiliriz. SQL Server, veritabanı tablolarına kayıt ekleme, silme veya güncelleme işlevlerinin kullanılmasına izin vermez.
SQL Server işlevleri oluşturmaya ilişkin kurallar şunlardır:
- Bir işlevin bir adı olmalıdır ve ad, @, $, # gibi özel bir karakterle veya diğer benzer karakterlerle başlayamaz.
- SELECT ifadeleri işlevlerle çalışan tek ifadelerdir.
- SQL'de SELECT sorgusu ile AVG, COUNT, SUM, MIN, DATE gibi bir fonksiyonu ve diğer fonksiyonları her yerde kullanabiliriz.
- Bir fonksiyon çağrıldığında derlenir.
- İşlevler bir değer veya sonuç döndürmelidir.
- İşlevler yalnızca giriş parametrelerini kullanır.
- Fonksiyonlarda TRY ve CATCH ifadelerini kullanamayız.
Fonksiyon Türleri
SQL Server, işlevleri iki türe ayırır:
- Sistem Fonksiyonları
- Kullanıcı Tanımlı Fonksiyonlar
Her iki türü de ayrıntılı olarak açıklayalım.
Sistem Fonksiyonları
Sistem tarafından tanımlanan işlevlere sistem işlevleri denir. Başka bir deyişle, tüm yerleşik işlevler Sunucu tarafından desteklenen işlevlere Sistem işlevleri adı verilir. Yerleşik işlevler, belirli bir görevi gerçekleştirirken bize zaman kazandırır. Bu tür işlevler genellikle değerleri hesaplamak ve verileri işlemek için SQL SELECT ifadesiyle çalışır.
SQL Server'da kullanılan bazı sistem işlevlerinin listesi:
- Dize İşlevleri (UZUNLUK, SUBSTRING, REPLACE, CONCAT, TRIM)
- Tarih ve Saat İşlevleri (tarihsaat, tarihsaat2, küçüktarihsaat)
- Toplama İşlevleri (COUNT, MAX, MIN, SUM, AVG)
- Matematiksel Fonksiyonlar (ABS, GÜÇ, PI, EXP, LOG)
- Sıralama İşlevleri (RANK, DENSE_RANK, ROW_NUMBER, NTILE)
Aşağıdaki resimde SQL Server'da kullanılan tüm yerleşik veritabanı işlevleri gösterilmektedir:
Kullanıcı Tanımlı Fonksiyonlar
Şu işlevler kullanıcı tarafından oluşturulan sistem veritabanındaki veya kullanıcı tanımlı bir veritabanındaki işlevler, kullanıcı tanımlı işlevler olarak bilinir. UDF işlevleri parametreleri kabul eder, eylemleri gerçekleştirir ve sonucu döndürür. Bu işlevler, karmaşık iş mantığını kapsayarak ve ihtiyaçlara göre her yerde yeniden kullanıma hazır hale getirerek geliştirmemizi basitleştirmemize yardımcı olur. Kullanıcı tanımlı işlevler, verileri sorgulamak için gereken kodun yazılmasını çok daha kolay hale getirir. Ayrıca sorgunun okunabilirliğini ve işlevselliğini de geliştirir ve diğer kullanıcıların aynı prosedürleri çoğaltmasına olanak tanır.
SQL Server, kullanıcı tanımlı işlevleri temel olarak iki türe ayırır:
tamsayıyı dizeye dönüştür Java
- Skaler Fonksiyonlar
- Tablo Değerli İşlevler
Bu UDF işlevlerinin açıklamalarını burada bulabilirsiniz.
Skaler Fonksiyonlar
SQL Server'da her zaman skaler işlev tek veya çoklu parametreleri kabul eder ve tek bir değer döndürür . Skaler fonksiyonlar kodumuzun basitleştirilmesinde faydalıdır. Bir dizi sorguda görünen karmaşık bir hesaplamaya sahip olabileceğimizi varsayalım. Böyle bir durumda formülü kapsülleyen ve onu her sorgu yerine her sorguda kullanan bir skaler fonksiyon oluşturabiliriz.
Aşağıda SQL Server'da skaler fonksiyonun oluşturulmasını gösteren sözdizimi verilmiştir:
CREATE FUNCTION schema_name.function_name (parameter_list) RETURNS data_type AS BEGIN statements RETURN value END
Yukarıdaki sözdizimi parametreleri aşağıda açıklanmıştır:
İlk önce fonksiyon adını tanımlayacağız. İŞLEV OLUŞTUR anahtar kelimeler. Şemanın adı isteğe bağlıdır. Şema adını tanımlamayacaksak SQL Server varsayılan şemayı kullanır dbo . Daha sonra listeyi tanımlayacağız. parametreler parantez içine alınmıştır. Üçüncü olarak fonksiyona ait ifadeleri yazacağız ve ardından İADELER deyiminde, dönüş değerinin veri türünü tanımlayın. Son olarak, fonksiyonun gövdesi içinde bir değer döndürmek için RETURN deyimini ekledik.
Örnek
Bu örnek bir işlev yaratacaktır. net satışları hesapla miktar, fiyat ve indirim değerine göre:
CREATE FUNCTION udfNet_Sales( @quantity INT, @price DEC(10,2), @discount DEC(3,2) ) RETURNS DEC(10,2) AS BEGIN RETURN @quantity * @price * (1 - @discount); END;
Artık tanımlanan tablodaki herhangi bir satış siparişinin net satışını hesaplamak için bu fonksiyonu kullanabiliriz.
Skaler fonksiyonları bulabileceğimiz aşağıdaki resim görüntüsü:
Skaler fonksiyonları SQL Server'daki yerleşik fonksiyonla aynı şekilde çağırabiliriz. Örneğin yukarıdaki udfNet_Sales fonksiyonunu aşağıdaki gibi çağırabiliriz:
SELECT dbo.udfNet_Sales(25, 500, 0.2) AS net_sales;
Bu işlevin yürütülmesi net satışları döndürecektir:
SQL Server ayrıca bize izin veriyor ALTER tuşunu kullanarak skaler işlevi değiştirmek için anahtar kelime. İşte bunu yapmak için sözdizimi:
ALTER FUNCTION schema_name.function_name (parameter_list) RETURNS data_type AS BEGIN statements RETURN value END
SQL Server veritabanından skaler fonksiyonu kaldırmak için aşağıdaki ifadeyi kullanabiliriz:
DROP FUNCTION [schema_name.]function_name;
Tablo Değerli İşlevler
SQL Server'daki tablo değerli işlevler şunlardır: kullanıcı tanımlı fonksiyon Bu, tablo tipindeki verileri döndürür. Bu fonksiyon olduğundan dönüş türü bir tablodur , bunu bir tabloyu kullandığımız gibi kullanabiliriz.
java dizesine sayı
Tablo değerli işlevi iki türe ayırabiliriz:
1. Satır İçi Tablo Değerleri İşlevleri
Bu UDF işlevi, işlevin gerçekleştirdiği eyleme dayalı olarak bir tablo değişkeni döndürür. Tablo değişkeninin değerini belirlemek için tek bir SELECT ifadesi kullanılmalıdır.
Örnek
np.linspace
Aşağıdaki örnek, bir tablo değerleri işlevi oluşturacak ve çalışan tablosunun verilerini alacaktır:
--It creates a table-valued function to get employees CREATE FUNCTION fudf_GetEmployee() RETURNS TABLE AS RETURN (SELECT * FROM Employee)
Bu sözdiziminde, İADE TABLOSU fonksiyonun bir tablo döndüreceğini belirtir. olmadığı için BAŞLA...SON ifadesinde, yalnızca çalışan tablosundaki verileri sorgular. Ayrıca herhangi bir parametresi yoksa doğrudan çağrılacaktır.
Tablo değerli fonksiyonları aşağıdakileri kullanarak çağırabiliriz: İTİBAREN Maddesi SEÇME sorgu. Örneğin , yukarıdakileri çağırabiliriz udf_GetEmployee aşağıdaki gibi işlev görür:
SELECT * FROM udf_GetEmployee();
Bu işlevin yürütülmesi aşağıdaki sonucu döndürecektir:
SQL Server ayrıca tablo değerli işlevleri CREATE anahtar sözcüğü yerine ALTER anahtar sözcüğünü kullanarak değiştirmemize de olanak tanır. Senaryonun geri kalanı aynı.
Çok ifadeli tablo değerli işlevler (MSTVF)
Bu UDF işlevi bir tablo değişkeni döndürür işlevin gerçekleştirdiği eyleme dayalıdır. Sonucu üretmek için tek veya birden fazla ifade içerebilir ve aynı zamanda birden fazla ifadenin sonucunu tablo şeklinde döndüren bir fonksiyondur. Bu kullanışlıdır çünkü bu fonksiyonda birden fazla ifadeyi çalıştırabilir ve toplu sonuçları döndürülen tabloya alabiliriz. Bu fonksiyonu, dönüş değeri olarak bir tablo değişkeni kullanarak tanımlayabiliriz. Fonksiyonun içinde birden fazla sorgu yürütüyoruz ve bu tablo değişkenine veri ekliyoruz.
Aşağıdaki örnek bir işlev adı oluşturur 'ÇOK DEĞERLİ' bu ' değerini döndürür @Çalışan' masa. id, emp_name ve maaş adında üç alan içerir. 'Çalışan' INSERT deyimini kullanarak tabloyu günceller ve ardından çalışan adını güncellemek için UPDATE deyimini kullanır.
CREATE FUNCTION MULTIVALUED() RETURNS @Employee TABLE (id INT, emp_name VARCHAR(50), salary INT) AS BEGIN INSERT INTO @Employee SELECT E.id, E.emp_name, E.salary FROM Employee E; UPDATE @Employee SET emp_name = 'Graeme Smith' WHERE id = 3; RETURN END
Çok ifadeli tablo değerli fonksiyonları SELECT sorgusunun FROM yan tümcesini kullanarak çağırabiliriz. Örneğin yukarıdaki fonksiyonu aşağıdaki gibi çağırabiliriz:
SELECT * FROM MULTIVALUED();
Bu işlevin yürütülmesi aşağıdaki sonucu döndürecektir:
Tablo değerli işlevler ne zaman kullanılmalıdır?
Tablo değerli işlevler genellikle parametreli görünümler olarak kullanılır. Tablo değerli işlevler, tabloların kullanıldığı her yerde kullanılabildiği için saklı yordamlardan daha esnektir.
Çözüm
Bu makale, SQL Server'da kullanılan işlevlere tam bir genel bakış açıklayacaktır. Burada SQL Server'da kullanılan temel olarak iki tür işlevi öğrendik: sistem ve kullanıcı tanımlı işlevler.