39 SQL Betikler ve Betik Birleştirme
39.1 SQL Betik tanımı
SQL dilinde betik tanımı ’ tırnak karakterleri arasında istenilen karakterlerin yazımı ile yapılır, örneğin: ‘Atilla’
Aşağıdaki sorguda ‘Atilla’ bir betik tanımıdır. Veritabanlarından FROM kullanımına göre her veri tabanında bu betik tanımı ve sorgu geçerlidir. Aşağıdaki sorgu SQLite ve SQL-Server’da çalışır.
SELECT 'Atilla';
Aynı sorgunun Oracle’da çalışması için dummy tablo olan dual kulanılmalıdır.
SELECT 'Atilla' FROM dual;
Bazı veritabanlar “” ilede betik tanımını izin verirler. Bu sadece bazı veritabanlarında örneğin, SQLite ve MySQL, çalışır. Bu betik tanımını kullanmayınız. Aşağıdaki sorgu SQLite çalışır.
SELECT 'Atilla', "Atilla";
Ama SQL-Server’da hata mesajı verir.
SQL Error [207] [S0001]: Invalid column name ‘Atilla’.
Aynı şekilde aşağıdaki sorgu
SELECT 'Atilla', "Atilla" FROM dual;
Oracle’da hata mesajı verir.
SQL Error [904] [42000]: ORA-00904: “Atilla”: invalid identifier
Betik (string) tanımlarında her zaman ’’ karakterlerini kullanınız.
39.2 SQL Betik Birleştirme (String concat)
SQL ile çalışırken betik birleştirme çok ihtiyaç duyarız. Bir çok veritabanında iki boru || işareti bu amaçla kullanılır. Aşağıdaki sorgu, Oracle ve SQLite üzerinde betik birleştirmeyi göstermektedir.
SELECT C.FirstName || ' ' || C.LastName AS TamAdi FROM Customer AS C;
Aynı özelliği SQL-Server’da + işareti ile yaparız.
SELECT C.FirstName + ' ' + C.LastName AS TamAdi FROM Customer AS C;
Kullanılan veritabanında göre bu 2 işaretten biri yaygındır.
Aynı işlem CONCAT fonksiyonu ilede yapılabilir.
- concat(X,…)
Bu fonksiyon kendisine verilen argumanları birleştirerek döndürür. Aşağıdaki sorgu, SQLite ve SQL-Server veritabanlarında çalışır.
SELECT CONCAT(C.FirstName,' ',C.LastName) AS TamAdi FROM Customer AS C;
Ama Oracle’da ne yazıkki CONCAT sadece 2 arguman ile çalışıyor.
SELECT CONCAT(CONCAT(C."FirstName",' '),C."LastName") AS TamAdi
FROM "Customer" C;
Oracle için CONCAT kullanışsız bir fonksiyondur.
Eğer veritabanı bağımsız SQL yazmanız gerekiyorsa CONCAT fonksiyonunu tercih edebiliriz. Ama ne yazık ki CONCAT bile tam veri tabanı bağımsız kod yazmaya yeterli değil.