Ana içeriğe geç

SQL Saklı Yordam: Sorguları Otomatikleştirin ve Optimize Edin

SQL saklı yordamlarının temellerini ve MySQL ile SQL Server dahil farklı veritabanlarında nasıl uygulanacağını öğrenin.
· 9 dk. oku

Yapay Zeka ile Keşfedin

SQL saklı yordamlar, bir veritabanında kaydedilen ve saklanan SQL deyimleri kümeleridir. Verileri işleme ve doğrulama görevlerini talep üzerine çalıştırabilir, yaygın işlemler için tekrarlayan SQL kodu yazma gereksinimini azaltır. Saklı yordamlar, verimlilik ve yeniden kullanılabilirliği teşvik ederek veritabanı yönetiminde faydalıdır. Ayrıca, gelişmiş veritabanı güvenliği ve sürdürülebilirliğini desteklerler. Bu yazıda, SQL saklı yordamlarının nasıl oluşturulacağını ve çalıştırılacağını, yaygın kullanım alanlarını ve en iyi uygulamaları ele alacağız.

Başlarken, DataCamp’in Introduction to SQL ve Learn SQL kurslarını almanızı şiddetle tavsiye ederim; SQL kullanarak verileri çıkarma ve analiz etme konusunda temel bilgileri edinirsiniz. Ayrıca, indirilebilir SQL Basics Cheat Sheet en yaygın SQL işlevlerini içerdiği için yararlı bir başvuru kaynağıdır.

SQL’de Saklı Yordam Nedir?

SQL’de saklı yordam, veritabanı içinde kaydedilen ve saklanan SQL deyimlerinin bir koleksiyonudur. SQL saklı yordamının amacı; sorgulama, ekleme, güncelleme veya silme gibi bir dizi işlemi veritabanı üzerinde gerçekleştirmektir.

Ayrı komutlar olarak çalıştırılan normal SQL sorgularından farklı olarak, saklı yordamlar bir dizi SQL deyimini kapsülleterek kodu tekrar tekrar SQL komutları yazmadan yeniden kullanmayı kolaylaştırır.

SQL saklı yordamlarının faydaları şunları içerir:

  • Kodun yeniden kullanılabilirliği: Bir saklı yordam oluşturulduktan sonra, gerektiği kadar çok kez çağrılabilir; SQL kodundaki gereksiz tekrarları ortadan kaldırır.
  • Geliştirilmiş performans: Saklı yordamlar sıklıkla daha hızlı çalışır; çünkü önceden derlenir ve veritabanı sunucusunda saklanır; bu da ağ gecikmesini ve derleme süresini azaltır.
  • Güvenlik: Saklı yordamlar, kullanıcılara tablolara doğrudan erişim vermeden bir saklı yordamı çalıştırma izni tanıyarak veri güvenliğini ve hassas verilere erişim kontrolünü iyileştirebilir.

Temel sözdizimi ve yapı

Bir saklı yordam oluşturmanın sözdizimi, kullanılan veritabanı sistemine (ör. MySQL, SQL Server, Oracle) göre biraz değişebilir. Aşağıda SQL Server sözdizimini kullanan genel bir örnek bulunmaktadır:

-- Create a stored procedure named ProcedureName
CREATE PROCEDURE ProcedureName 
    @Parameter1 INT, 
    @Parameter2 VARCHAR(50)  
AS
BEGIN
    -- SQL statements go here
    SELECT * FROM TableName WHERE Column1 = @Parameter1 AND Column2 = @Parameter2;
END;

Yukarıdaki sözdiziminde;

  • CREATE PROCEDURE: Yeni bir saklı yordam tanımlamak için kullanılan komuttur.

  • ProcedureName: Saklı yordama verilen ad. Veritabanı içinde benzersiz olmalıdır.

  • @Parameter1, @Parameter2: Parametreler isteğe bağlıdır; yordamın veri girişi almasına olanak tanır. Her parametre bir @ sembolü ve bir veri türüyle (ör. INT, VARCHAR(50)) tanımlanır.

  • AS BEGIN...END: BEGIN ve END arasındaki SQL deyimleri, ana mantığın çalıştırıldığı yordam gövdesini oluşturur. Bu örnekte yordam, belirli koşullara göre bir tablodan kayıtları getirir.

Girdi ve çıktı parametreleri

Girdi ve çıktı parametreleri, bir saklı yordama değerler iletip ondan değerler almanıza olanak tanır.

Örneğin, @Parameter1 bir girdi parametresi olarak tanımlanmışsa, yordam çağrıldığında herhangi bir değer atanabilir ve bu da SQL mantığını veya çıktıyı etkiler. Aşağıdaki örnekte, @UserID parametresi, verilen UserID’ye özgü verileri getirir.

-- Create a procedure to retrieve data for a specific user by UserID
CREATE PROCEDURE GetUserData 
 -- Input parameter: ID of the user to retrieve
    @UserID INT 
AS
BEGIN
    -- Select all columns from Users where UserID matches the input parameter
    SELECT * FROM Users WHERE UserID = @UserID;
END;

OUTPUT anahtar sözcüğüyle tanımlanan çıktı parametreleri, bir saklı yordamın çağıran ortama bir değer geri göndermesine olanak tanır. Örneğin, bir yordam bir indirimi hesaplıyorsa, bunu çağıran programa iletmek için bir çıktı parametresi kullanabilir.

-- Create a procedure to calculate the discounted price
CREATE PROCEDURE CalculateDiscount 
    @Price DECIMAL(10, 2), 
    @DiscountRate DECIMAL(5, 2),  
    @FinalPrice DECIMAL(10, 2) OUTPUT -- Output: final price after discount
AS
BEGIN
    -- Calculate final price by applying the discount rate to the original price
    SET @FinalPrice = @Price * (1 - @DiscountRate);
END;

Bu yordamı çağırmak için şunu kullanırsınız;

-- Declare a variable to store the final price after discount
DECLARE @FinalPrice DECIMAL(10, 2);
-- Execute the CalculateDiscount procedure with a price of 100 and a 10% discount 
-- Store the output in the @FinalPrice variable
EXEC CalculateDiscount @Price = 100, @DiscountRate = 0.1, @FinalPrice = @FinalPrice OUTPUT;
-- Select and display the final discounted price
SELECT @FinalPrice AS FinalPrice;

MySQL’de Saklı Yordamlar

Belirttiğim gibi, bir saklı yordamı SQL’de çalıştırmanın yöntemi, veritabanı sistemine ve kullanılan araçlara bağlı olarak değişebilir.

MySQL’de saklı yordam oluşturma

MySQL’de bir saklı yordam oluşturmak, yordamın adını, parametrelerini ve gövdesini oluşturan SQL deyimlerini tanımlamayı içerir. Aşağıdaki örnek, girdi parametresi olarak EmployeeID alan ve belirli çalışana ait ayrıntıları getiren GetEmployeeDetails adlı bir yordam oluşturur.

DELIMITER $
-- Create a procedure to retrieve details for a specific employee by EmployeeID
CREATE PROCEDURE GetEmployeeDetails(IN EmployeeID INT)  
BEGIN  
    -- Select all columns from Employees where EmployeeID matches the input parameter  
    SELECT * FROM Employees WHERE EmployeeID = EmployeeID;  
END$
DELIMITER ;

MySQL’de saklı yordam çalıştırma

Bir saklı yordamı çalıştırmanın en yaygın yolu SQL komutlarını kullanmaktır. MySQL’de saklı yordamı çalıştırmak için CALL komutunu kullanırız.

CALL ProcedureName();

Tanımladığımız GetEmployeeDetails yordamını kullanarak, çalıştırma sorgusu şu şekilde görünür:

-- Execute the stored procedure to retrieve details for EmployeeID 101
CALL GetEmployeeDetails(101);

SQL Server’da Saklı Yordamlar

SQL Server, saklı yordamları oluşturmak, çalıştırmak ve yönetmek için özel sözdizimi ve komutlar sağlar. Bu yaklaşım, minimum tekrar ile karmaşık görevleri ele alabilen verimli ve yeniden kullanılabilir SQL rutinleri oluşturmayı kolaylaştırır.

SQL Server’da saklı yordam oluşturma

SQL Server’da bir saklı yordam oluşturmak, yordamın adını, parametrelerini ve gövdesini oluşturan SQL deyimlerini tanımlamayı içerir. Aşağıdaki örnek, girdi parametresi olarak @EmployeeID alan ve belirli çalışana ait ayrıntıları getiren GetEmployeeDetails adlı bir yordam oluşturur.

-- Create a procedure to retrieve details for a specific employee by EmployeeID
CREATE PROCEDURE GetEmployeeDetails
    @EmployeeID INT          -- Input parameter: ID of the employee to retrieve
AS
BEGIN
    -- Select all columns from Employees where EmployeeID matches the input parameter
    SELECT * FROM Employees WHERE EmployeeID = @EmployeeID;
END;

SQL Server’da saklı yordam çalıştırma

SQL Server’da, bir saklı yordamı çağırmak için EXEC veya EXECUTE komutu kullanılır. Aşağıdaki örnek, belirli girdi parametreleri kullanarak GetEmployeeDetails saklı yordamının nasıl çalıştırılacağını göstermektedir. 

-- Execute the GetEmployeeDetails procedure with the EmployeeIDset to 102
EXEC GetEmployeeDetails @EmployeeID = 102;

Ayrıca, komutta değişken tanımlayarak çıktı parametrelerini de çalıştırabilirsiniz. Aşağıdaki örnekte, @TotalSales, CalculateTotalSales’tan çıkışı almak üzere bir değişken olarak tanımlanmıştır. 

-- Declare a variable to store the total sales amount
DECLARE @TotalSales DECIMAL(10, 2);
-- Execute CalculateTotalSales for SalespersonID 5, store the result in @TotalSales
EXEC CalculateTotalSales @SalespersonID = 5, @TotalSales = @TotalSales OUTPUT;
-- Display the total sales amount
SELECT @TotalSales AS TotalSales;

SQL Server’ın veri sorgulama için sunduğu farklı işlevleri anlamak üzere Introduction to SQL Server kursumuzu almanızı öneririm. Ayrıca, yalnızca saklı yordamları oluşturma, güncelleme ve çalıştırma becerileri kazandırmakla kalmayıp, aynı zamanda toplu işlevler, birleştirme, tablo ekleme ve silme gibi konularda da yardımcı olacak kapsamlı SQL Server Developer kariyer yolumuzu da değerlendirin.

Saklı Yordamların Yaygın Kullanım Alanları

SQL saklı yordamlar, tekrarlayan ve karmaşık görevlerin gerektiği senaryolarda kullanışlıdır. Aşağıdakiler, veri yönetimi ve iş operasyonlarında saklı yordamların gerçek dünya uygulamalarıdır. 

Veri doğrulama ve bütünlüğün sağlanması

Saklı yordamlar, güncellemeden veya eklemeden önce verileri doğrulamak için kullanılabilir. Aşağıdaki örnekte, bir saklı yordam yeni bir kaydı Customers tablosuna eklemeden önce müşterinin e-postasının benzersiz olduğunu kontrol ederek veri tutarlılığını sağlar. Bu, doğrulama mantığını veritabanı içinde merkezileştirir, tekrarları azaltır ve farklı uygulamalar arasında tutarlı bir şekilde uygulanmasını sağlar.

-- Create a procedure to add a new customer, checking for duplicate email
CREATE PROCEDURE AddCustomer
    @CustomerName VARCHAR(50), 
    @CustomerEmail VARCHAR(50)
AS
BEGIN
    -- Check if the email already exists in the Customers table
    IF EXISTS (SELECT 1 FROM Customers WHERE Email = @CustomerEmail)
        -- Throw an error if the email is already in use
        THROW 50000, 'Email already exists.', 1;
    ELSE
        -- Insert new customer details if email is unique
        INSERT INTO Customers (Name, Email) VALUES (@CustomerName, @CustomerEmail);
END;

Otomatik veri işleme ve raporlama

Saklı yordamları düzenli raporlar üretmek veya büyük veri kümelerini işlemek için de kullanabilirsiniz. Örneğin, bir saklı yordam bir e-ticaret platformundan günlük satış verilerini bir araya getirip bir raporlama tablosuna kaydedebilir; böylece ekiplerin karmaşık sorgular çalıştırmadan satış içgörülerine erişmesi kolaylaşır.

-- Create a procedure to generate a daily sales report
CREATE PROCEDURE GenerateDailySalesReport
AS
BEGIN
    -- Insert today's date and total sales into the SalesReport table
    INSERT INTO SalesReport (ReportDate, TotalSales)
    
    -- Select current date and sum of sales for today from Sales table
    SELECT CAST(GETDATE() AS DATE), SUM(SalesAmount) 
    FROM Sales 
    WHERE SaleDate = CAST(GETDATE() AS DATE);
END;

İşlem yönetimi

Saklı yordamları kullanarak, birden fazla işlemin tek bir işlem (transaction) olarak yürütülmesini sağlayabilirsiniz. Örneğin, bir bankacılık sisteminde bir saklı yordam, bir para transferinde hem borç hem alacak hareketlerini ele alabilir; böylece her iki eylemin birlikte başarılı olması veya birlikte başarısız olması güvence altına alınır.

-- Create a procedure to transfer funds between accounts
CREATE PROCEDURE TransferFunds
    @SenderAccount INT,
    @ReceiverAccount INT,
    @Amount DECIMAL(10, 2)
AS
BEGIN
    BEGIN TRANSACTION;  -- Start a transaction to ensure atomicity
    -- Deduct the specified amount from the sender's account balance
    UPDATE Accounts SET Balance = Balance - @Amount WHERE AccountID = @SenderAccount;
    -- Add the specified amount to the receiver's account balance
    UPDATE Accounts SET Balance = Balance + @Amount WHERE AccountID = @ReceiverAccount;
    -- Check for errors and rollback if any occurred; otherwise, commit the transaction
    IF @@ERROR <> 0
        ROLLBACK TRANSACTION;  -- Undo all changes if an error occurred
    ELSE
        COMMIT TRANSACTION;    -- Confirm changes if no errors
END;

Erişim kontrolü ve veri güvenliği

SQL saklı yordamları, hassas bilgilere veri erişimini kontrol etmek için de kullanılabilir. Örneğin, bir saklı yordam, kullanıcılara yalnızca ilgili alanları (örneğin hesap bakiyeleri) getiren bir yordamı çağırmalarına izin vererek doğrudan tablo erişimini sınırlayabilir; işlem ayrıntılarını hariç tutabilir.

-- Create a procedure to retrieve account balance, with authorization check
CREATE PROCEDURE GetAccountBalance
    @AccountID INT, 
    @UserID INT 
AS
BEGIN
    -- Check if the account exists and is owned by the specified user
    IF EXISTS (SELECT 1 FROM Accounts WHERE AccountID = @AccountID AND UserID = @UserID)
        -- If authorized, select and return the account balance
        SELECT Balance FROM Accounts WHERE AccountID = @AccountID;
    ELSE
        -- If unauthorized, throw an error
        THROW 50000, 'Unauthorized access.', 1;
END;

Veri taşıma ve ETL süreçleri

Saklı yordamlar, sistemler arasında veri yüklemek, dönüştürmek ve taşımak için de kullanılır. Bir saklı yordam, bir kaynak veritabanından veri çıkarmayı, gerektiği gibi dönüştürmeyi ve hedef tabloya eklemeyi otomatikleştirerek raporlama veya analiz için veri entegrasyonunu basitleştirebilir.

CREATE PROCEDURE ETLProcess
AS
BEGIN
    -- Extract
    INSERT INTO StagingTable
    SELECT * FROM SourceTable WHERE Condition;
    -- Transform
    UPDATE StagingTable SET ColumnX = TransformationLogic(ColumnX);
    -- Load
    INSERT INTO TargetTable
    SELECT * FROM StagingTable;
END;

Saklı Yordamlar için En İyi Uygulamalar

Verimli ve sürdürülebilir saklı yordamlar yazmak, veritabanınızın en iyi şekilde çalışmasını sağlar. Aşağıdakiler, SQL veritabanlarınız için saklı yordam yazmaya yönelik ipuçlarıdır.

  • Tutarlı adlandırma kuralları kullanın: Saklı yordamların kolayca tanımlanıp anlaşılması için tutarlı ve açıklayıcı bir adlandırma biçimi kullanın. Ayrıca, sistem yordamları için ayrılmış olan ve olası çakışma ile performans sorunlarına yol açabilecek sp_ önekinden SQL Server’da kaçının.

  • Hata işleme uygulayın: Hataları yakalamak ve ele almak, veri bütünlüğünü korumak için SQL deyimlerini TRY...CATCH bloklarına sarın. 

  • Performans için optimize edin: Yavaş ve kaynak tüketimi yüksek olabildikleri için imleçlerin (cursor) kullanımını en aza indirin. Bunun yerine, genellikle daha verimli olan küme tabanlı işlemleri deneyin. Ayrıca, sık kullanılan sütunları dizinleyin ve bellek yükünü azaltmak ve verimliliği artırmak için büyük tablolarda karmaşık birleştirmelerden kaçının.

  • Saklı yordamları parametreleştirin: Sabit değerler yerine parametreler kullanarak yordamınıza dinamik değerler geçirmenize olanak tanıyın; böylece daha esnek ve yeniden kullanılabilir hale gelir.

Toplama işlevlerini ve birleştirmeleri kullanarak veri filtrelemeyi daha iyi öğrenmek için Intermediate SQL kursumuza göz atın. Ayrıca, tablo birleştirme ve veri analizi becerilerinizi geliştirmek için SQL Server Fundamentals ve SQL Fundamentals beceri yollarını deneyin.

Sonuç

SQL saklı yordamları, veritabanı yönetiminde kodun yeniden kullanılabilirliğini ve performans optimizasyonunu artırır. Saklı yordamlar ayrıca kontrollü erişim ve veri bütünlüğünün sağlanması yoluyla veritabanı güvenliğini güçlendirir. Bir veri uygulayıcısı olarak, en iyi veritabanı yönetimi uygulamalarında ustalaşmak için saklı yordamlar oluşturmayı ve çalıştırmayı pratik etmenizi tavsiye ederim.

Yetkin bir veri analisti olmakla ilgileniyorsanız, gerekli becerileri öğrenmek için Associate Data Analyst in SQL kariyer yolumuza göz atın. Profesyonel panoları SQL kullanarak nasıl oluşturacağınızı öğrenmek istiyorsanız Reporting in SQL kursu da uygundur. Son olarak, SQL’i veri analizi için kullanma konusundaki yetkinliğinizi göstermek ve diğer veri profesyonelleri arasında öne çıkmak için SQL Associate Certification almanızı öneririm.

Allan Ouko

Yazar

Allan Ouko

Veri analitiği, iş zekâsı ve veri bilimi alanlarında pratik deneyime sahip Veri Bilimi Teknik Yazarı. SQL, Python, Power BI, Databricks ve veri mühendisliği üzerine, gerçek dünya analitik çalışmalarına dayanan, uygulamaya dönük ve sektöre odaklı içerikler yazıyorum. Yazılarım teknik derinlikle iş etkisi arasındaki köprüyü kurarak profesyonellerin veriyi güvenle karara dönüştürmelerine yardımcı olur.

Saklı Yordam SSS

SQL’de saklı yordam nedir?

Saklı yordam, belirli bir görevi yerine getiren ve yeniden kullanım için veritabanı içinde saklanan SQL deyimlerinin bir koleksiyonudur.

Saklı yordamlar, normal SQL sorgularından nasıl farklıdır?

Tekil sorgulardan farklı olarak, saklı yordamlar önceden derlenmiştir ve akış denetimi deyimleri, parametreler ve hata işleme içerebilir; bu da daha karmaşık işlemlere olanak tanır.

Saklı yordamlarda girdi ve çıktı parametreleri arasındaki fark nedir?

Girdi parametreleri kullanıcıların yordama değerler iletmesine, çıktı parametreleri ise yordamdan çağırana değerler döndürülmesine imkân tanır.

Saklı yordamlar veritabanına özgü müdür?

Saklı yordamlar, her SQL veritabanı yönetim sistemine (ör. SQL Server, MySQL, Oracle) özgü olabilir ve platformlar arasında sözdizimi farklılıkları bulunur.

Konular

İlgili