SQL ‘Delimiter’ nedir, ne için kullanılır?

4 min read

Table of Contents

SQL sorgularda karşılaştığımız ilk gizemlerden biri DELIMITER‘in ne işe yaradığıdır. Bu, özellikle saklı yordamlar, tetikleyiciler ve fonksiyonlar gibi daha karmaşık SQL yapılarını keşfetmeye başladığımızda, önemli bir rol oynar. Sıradan bir SQL kullanıcısının nadiren karşılaşacağı bu özellik, aslında veritabanı dünyasının derinliklerinde gizli, güçlü bir araçtır. Peki SQL delimiter kullanımı nasıldır? SQL delimiter örnek kullanımları nelerdir?

DELIMITER, SQL ifadelerini birbirinden ayırmak için kullanılan gizemli bir sembol setidir ve bu semboller, SQL’in çok katmanlı yapısının doğru şekilde işlenmesini sağlar. Bu yazıda, DELIMITER‘in nasıl bir kurtarıcı olduğunu ve SQL büyücülerinin neden bu aracı saklı tuttuklarını keşfedeceğiz.

SQL’de Delimiter nedir?

SQL’de DELIMITER kelimesi, SQL komutlarını birbirinden ayırmak için kullanılan özel bir karakter ya da karakter dizisini belirlemek için kullanılır. Bu, genellikle saklı yordamlar (stored procedures), tetikleyiciler (triggers), fonksiyonlar (functions) veya batch SQL komutları yazarken gereklidir. Çünkü bu tür yapılar içerisinde, standart SQL ifade ayırıcısı olan noktalı virgül (;) kullanılmaya devam ederse, SQL motoru her noktalı virgülde ifadenin sona erdiğini düşünür ve komutu erken çalıştırmaya çalışır. Bu da genellikle söz dizimi hatalarına yol açar.

DELIMITER kullanımı genellikle MySQL veya MariaDB gibi veritabanı yönetim sistemlerinde görülür. Bu sistemlerde, DELIMITER kullanarak, SQL ifadelerini ayırmak için geçici olarak farklı bir ayraç belirleyebilirsiniz. Bu, saklı yordamların veya diğer karmaşık SQL bloklarının içinde noktalı virgül kullanmanıza olanak tanır.

Örneğin, bir saklı yordam oluştururken, yordamın başlangıcını ve sonunu belirlemek için DELIMITER kullanabilirsiniz:

DELIMITER // -- DELIMITER'ı // olarak değiştiriyoruz

CREATE PROCEDURE MyProcedure()
BEGIN
    -- Saklı yordamın içeriği
    SELECT 'Hello, World!';
END//

DELIMITER ; -- DELIMITER'ı tekrar noktalı virgüle çeviriyoruz

Bu örnekte, DELIMITER // ifadesi ile ayraç // olarak değiştirilmiştir. Bu sayede, saklı yordamın içindeki noktalı virgüller (;) komut sonu olarak algılanmaz. Saklı yordam tanımı END// ile sonlandırıldıktan sonra, DELIMITER ; ifadesi ile standart SQL ifade ayırıcısı olan noktalı virgüle (;) geri dönülür.

Örnekler

SQL DELIMITER kullanımıyla ilgili daha fazla örnek senaryo oluşturmak, konunun daha iyi anlaşılmasını sağlayabilir. İşte bu kavramı farklı durumlarda nasıl kullanabileceğinize dair bazı senaryolar:

Çok Adımlı Saklı Yordam Oluşturma

Bir saklı yordam içerisinde birden fazla SQL komutu çalıştırmak istediğinizde, her bir komutu noktalı virgül ile ayırmanız gerekir. Ancak, bu saklı yordamı oluştururken kullanılan noktalı virgüller, komutların erken sonlanmasına neden olabilir. Bu durumda DELIMITER kullanarak bu sorunu çözebilirsiniz:

DELIMITER $$

CREATE PROCEDURE UpdateAndNotify()
BEGIN
    UPDATE Customers SET status = 'Active' WHERE expires_at < NOW(); -- Birinci komut
    INSERT INTO Notifications (message) VALUES ('Customer status updated'); -- İkinci komut
END $$

DELIMITER ;

Tetikleyici Tanımlama

Tetikleyiciler, veritabanındaki bir tabloya yapılan belirli işlemler sonrası otomatik olarak çalıştırılan özel saklı yordamlardır. Bir tetikleyici oluştururken, yine noktalı virgül kullanmanız gerekebilir. DELIMITER kullanarak, tetikleyicinin düzgün bir şekilde tanımlanmasını sağlayabilirsiniz:

DELIMITER $$

CREATE TRIGGER AfterOrderInsert
AFTER INSERT ON Orders
FOR EACH ROW
BEGIN
    INSERT INTO AuditLog (description) VALUES ('New order added');
END $$

DELIMITER ;

Fonksiyon Tanımlama

Bir SQL fonksiyonu tanımlarken de benzer bir durum söz konusudur. Fonksiyon içinde birden fazla SQL ifadesi kullanıldığında, DELIMITER kullanımı işleri kolaylaştırır:

DELIMITER $$

CREATE FUNCTION TotalOrders (customerId INT)
RETURNS INT
BEGIN
    DECLARE orderCount INT;
    SELECT COUNT(*) INTO orderCount FROM Orders WHERE customer_id = customerId;
    RETURN orderCount;
END $$

DELIMITER ;

Karmaşık SQL Scriptleri

Büyük ve karmaşık SQL scriptleri yazarken, birden çok saklı yordam, tetikleyici ve fonksiyon tanımlamalarını içerebilirsiniz. Bu tür scriptlerde, her bir bileşeni başarıyla tanımlamak için DELIMITER‘in akıllıca kullanılması gerekir:

DELIMITER $$

-- Saklı yordam tanımı
CREATE PROCEDURE ResetAccounts() BEGIN ... END $$

-- Tetikleyici tanımı
CREATE TRIGGER CheckBalance AFTER UPDATE ON Accounts FOR EACH ROW BEGIN ... END $$

-- Fonksiyon tanımı
CREATE FUNCTION CalculateInterest (amount DECIMAL(10,2)) RETURNS DECIMAL(10,2) BEGIN ... END $$

DELIMITER ;

Bu örnekler, DELIMITER‘in SQL’de, özellikle saklı yordamlar, tetikleyiciler ve fonksiyonlar gibi karmaşık yapılar oluştururken nasıl bir temel taş olduğunu gösterir. Her senaryoda, DELIMITER kullanımı, SQL motorunun her bir komutu ve tanımı doğru bir şekilde işlemesini sağlar.

Share this Post

Birlikte Harika Bir Sey Insa Edelim

Aklinizda bir proje mi var? Formu doldurun, size en kisa surede donelim.

Hizli geri donus
Ucretsiz proje danismanligi

Veya Bize Dogrudan Ulasin