Merhaba, Personel Yönetim Sistemini geliştirmeye kaldığımız yerden devam ediyoruz.

Bir önceki dersimizde normal bir şartlı sorgu ile veri çekmiştik.

Bu yazımda ise Troia’ya ait bir özellikten sorguları String olarak oluşturup nasıl çalıştırabileceğimizi göstereceğim.

Bazı durumlarda sorgumuza iki farklı durumun kontrolü yapılıp ona göre sorgulatmamız gerekebilir. Böyle bir durumu normal bir SQL sorgusu ile çözmek biraz zor. Bunu çözmek için Troia’da oluşturulacak sorgular bir String içine atılıp sonra asıl sorgu cümlesine @ObjectIsmi şeklinde verilerek çalıştırılır.

Bizim örneğimizde herhangi bir şarta bağlı durum yok ama bir önceki yazımızdaki Where şartı için yazdığımız kısmı bir String içine yazacağız sonra bunu sorgu üzerinden çağıracağız.

Önce ilk halini görelim.

SELECT * 
	FROM EDUTESTTABLE 
	WHERE PERSONELNO LIKE CP(PERSONELNO)
	AND PERSONELNAME LIKE CP(PERSONELADI)
	AND PERSONELLASTNAME LIKE CP(PERSONELSOYADI)
	AND PHONENUMBER LIKE CP(TELEFONNO)
	AND DEPARTMENT LIKE CP(DEPARTMAN)
	AND MAIL LIKE CP(MAIL)
	AND BIRTHDATE <= DOGUMTARIHI
	AND STARTDATE <= ISEBASLAMATARIHI
		INTO PERSONELBILGISI;

Şimdi ise bahsettiğimiz kodlama şeklini göstereyim. Daha sonra üzerinden anlatalım.

OBJECT :

STRING SELWHERE;

SELWHERE='PERSONELNO LIKE '+TOCHAR(39)+CP(PERSONELNO)+TOCHAR(39);
SELWHERE=SELWHERE+' AND PERSONELNAME LIKE'+TOCHAR(39)+CP(PERSONELADI)+TOCHAR(39);
SELWHERE=SELWHERE+' AND PERSONELLASTNAME LIKE'+TOCHAR(39)+CP(PERSONELSOYADI)+TOCHAR(39);
SELWHERE=SELWHERE+' AND PHONENUMBER LIKE'+TOCHAR(39)+CP(TELEFONNO)+TOCHAR(39);
SELWHERE=SELWHERE+' AND DEPARTMENT LIKE'+TOCHAR(39)+CP(DEPARTMAN)+TOCHAR(39);
SELWHERE=SELWHERE+' AND MAIL LIKE'+TOCHAR(39)+CP(MAIL)+TOCHAR(39);
SELWHERE=SELWHERE+' AND BIRTHDATE <= DOGUMTARIHI ';
SELWHERE=SELWHERE+' AND STARTDATE <= ISEBASLAMATARIHI';


SELECT * 
	FROM EDUTESTTABLE 
	WHERE @SELWHERE
	INTO PERSONELBILGISI;


Öncelikle türü STRING olan bir OBJECT tanımlıyoruz. İstediğiniz ismi verebilirsiniz ama IAS standartlarına uygun kod geliştirme isteğiniz varsa biz Where kısmını yazacağımız için değişken ismimize SELWHERE diyoruz.

Daha sonra bu değişkene adım adım sorgudaki şartı yazıyoruz.

‘PERSONELNO LIKE ‘ Where ifadesinden sonra ilk satır böyle başlıyordu zaten bununla başladık. Sonrasında devamı CP(PERSONELNO) şeklinde devam ediyordu. Ama yazdığımız ifade bir String olduğu için bunu şöyle yazarsak

‘PERSONELNO LIKE CP(PERSONELNO) ‘ buradaki her şeyi bir cümle gibi bir ifade gibi göreceği için CP metodunu ve PERSONELNO parametresini işleyemeyecektir.

Bunu çözmek için bir string birleştirme işlemi yapmamız gerek.

İki String ifade + işareti ile birleştirilebilir.

Sondaki CP(PERSONELNO) kısmını iki tek tırnak arasına yazılıp birleştirirsek ilkinden farklı bir durum oluşmayacaktır. Onun için tırnak işaretlerini Troia’nın anlayacağı şekilde değil SQL’in anlayacağı şekilde yapacağız. Onu da TOCHAR(39) ile yapacağız.

ASCII karakterlerinde 39’un karşılığı tek tırnaktır.

'PERSONELNO LIKE '+TOCHAR(39)+CP(PERSONELNO)+TOCHAR(39);

bu işlemi yaparak tamda istediğimiz sorgu kompozisyonunu elde etmiş olduk aslında.

Daha sonra alt alta bütün şart bu değişkene eklenir.

SELWHERE=SELWHERE+' AND PERSONELNAME LIKE'+TOCHAR(39)+CP(PERSONELADI)+TOCHAR(39);

Burada dikkat etmeniz gereken AND ifadesinden önce bir boşluk bırakıldığıdır. Boşluğu eğer bırakmazsanız birleştirme işlemi sonrasında bir önceki parametreden gelen değeri AND ile birleştirir ve sorgu doğru bir şekilde çalışmayacaktır.

Tüm işlemleri yaptıktan sonra artık bu değişkeni sorgu içinde çalıştırmak kaldı.

SELECT * FROM EDUTESTTABLE WHERE @SELWHERE INTO PERSONELBILGISI;

WHERE ifadesinden sonra bir boşluk bırakıyoruz ve @SELWHERE diyerek tüm sorgu şartını oraya taşımış oluyoruz.

Yapı olarak daha karmaşık gibi görünüyor ama bu tür kodlamalara sıklıkla ihtiyaç duyuyoruz geliştirme yaparken.

Şimdi birde sonuçlarına bakalım.

İstediğimiz sonuçları yine alabildiğimize göre bir sonraki yazımda görüşmek üzere.


Murat Bilginer
21 Şubat 1992'de doğdum. Endüstri Mühendisi olarak lisansımı 2016 yılında tamamladım. Industryolog Akademi - NGenius oluşumlarının kurucusuyum. Şu anda kendi şirketim Brainy Tech ile Web ve Mobil Geliştirme, AWS, Google Cloud Platform Sistemleri için DevOps, Big Data Analiz ve Görselleştirme hizmetleri sunmakta ve Online Eğitimler vermekteyiz.