Herkese merhaba,
Bugün prosedür yapısını ele almak istiyorum. Peki nedir bu prosedür?
Tam adı Stored Procedure ve Saklı Yordam anlamına gelir. Veritabanındaki objelere erişim sağlar. Aslına bakarsanız yordamların yaptığını geliştirdiğiniz uygulamalarda dahi kullanabilirsiniz yani sıfır yordam ile bütün işi tek bi uygulamada kullanabilirsiniz fakat bu tercih edilen birşey değil. Nedeni ise yordamların hazırlanan uygulamalara göre daha performanslı çalışmasıdır. Kendi yapıları içinde kalmaları performans ve güvenlik açısından daha iyi.
Yeni karakter oluşturma yordamının üzerinden gidelim,
Parametreler. Clientten dönen değerler diyebiliriz. Örneğin, @CharID karakter oluşturma ekranında, yeni karakterinize verdiğiniz ad olarak döner. Diğer parametrelerde aynı işlevi görür. (nRet hariç ona daha sonra dönücez.)
Burada ne yaptık? DECLARE nedir? DECLARE değişkenlerdir. Burada yaptığımız işlemde ACCOUNT_CHAR tablosundan çektiğimiz veriyi değişkenimiz alır ve bu değişkenin aldığı değeri birçok yerde kullanabiliriz.
SET ise adındanda belli olduğu gibi değişkenimizin default değeridir. Genelde default değer değişkeni verdikten sonra SET @Nation = 0 şeklinde kullanılıyor fakat ben bu şekilde kullanmayı tercih ediyorum.
Ve sıra geldi IF'lere şahsen en sevdiğim kısımdır 😛
IF @Nation = 1 AND @Race > 10 eğer hesap karakterleri tablosundan çektiğimiz @Nation değeri 1 (Karus) VE karakter oluşturma ekranında seçtiğimiz Race 10'dan büyük ise client'e nRet = 2 değerini döndür. (El Morad race değerleri 11,12 ve 13'dür.)
ELSE IF @Nation = 2 AND @Race < 10 ise aynı şekilde El Morad için karus race kontrolü yapıyor ve nRet = 2 değeri döndürür. (Karus race değerleri 1,2,3 ve 4'dür.)
ELSE IF @Nation <> 1 AND @Nation <> 2 eğer hesap karakterleri tablosundan çektiğimiz @Nation değeri 1 ve 2'ye eşit değil ise nRet = 2 değeri döndür. Bildiğiniz gibi iki ırk değeri vardır (1-Karus, 2-El Morad).
Ve yeni karakter oluşturma ekranında, karakterinize vericeğiniz ad/isim kontrolü yapıcağımız bölüme geldik.
DECLARE @Row tinyint yukarıda anlattığım gibi değişkenimiz.
SET @Row = ... buradaki işlem ise yeni karakterimize verdiğimiz isimden kaç adet var ona bakıcaz. COUNT satır sayar, genelde COUNT(*) şeklinde kullanılır, eğer tek sutun kontrol edilecek ise (*) ifadesi yerine sutun adı girilebilir. (*) ifadesi "Tüm sutunları say" anlamına gelir. Karakter bilgileri USERDATA tablomuzda tutulduğu için bu tablodan kontrol yapıyoruz.
Bir altındaki SET @Row += ... ise bana ait bir sistem, NCS kullanımında karakter yeni isim aldıktan sonra karakterin eski ismi bu tabloya girilir bu şekilde NCS basılmış eski isimler kullanılmaz. Tabiki elle girmiyoruz bu isimleri, Oyun için NCS yordamına tek bir satır INSERT işlemi ekleyerek bu sistemi aktif edebilirsiniz. Ayrıca SET @Row += ... buradaki + ifadesi bir üstünde verilen @Row değişkeninin aldığı değeri 2. default değer ile topluyor, bildiğiniz toplama işlemi 😛
IF @Row > 0 her iki tablodan aldığımız veri 0 (sıfır)'dan büyük ise yeni bu isimde karakter var ise nRet = 3 değeri döndür.
Son kısıma geldik. Zone, PosX, PosZ, PosY değişkenleri yeni karakter açıldığında, karakterin ilk bulunduğu harita ve koordinatların default değeridir. Aşağıdaki koordinatlar USKO'nun osmanlı moradon iki gate arası orjinal koordinatlarıdır, çalabilirsiniz 😛
Aşağıdaki işlemler UPDATE ve INSERT işlemlerimiz. Hesap karakterleri tablosunu günceller ve USERDATA tablomuza yeni karakter bilgilerimizi girer. Hesap karakterleri tablomuza ilk INSERT işlemimiz karakter seçme ekranında yapılır.
TRANSACTION güvenlik duvarımız olarak düşünebilirsiniz 😛 Transaction arasına girilen bütün işlemlerin yapılmasına olanak tanır. Yani "Bütün işlemleri yap eğer yapamassan rollback ile döndür ve diğer işlemleri geçersiz kıl" anlamına gelir.
BEGIN TRAN İşlemi başlat
IF @@ERROR <> 0 Hata sayısı 0 (sıfır)'a eşit değil ise (işlemlerin yarım kalma durumlarında) ROLLBACK yap ve nRet = 4 değeri döndür.
COMMIT TRAN İşlemi tamamla
Eğer işlemler başarı ile sonuçlanır ise nRet = 0 değeri döndürür yani işlem başarılı.
Not olarak değişkenimize default değerini verirken SET yerine DECLARE @Nation = 0 şeklindede kullanabiliriz.
Aynı zamanda;
tinyint - byte veya uint8
smallint - short veya uint16
char(21) - char(21)
int - int
yukarıdaki değerlerin VC++ 98 veya VSC++ olarak karşılıklarıdır.
For By Katana
Bugün prosedür yapısını ele almak istiyorum. Peki nedir bu prosedür?
Tam adı Stored Procedure ve Saklı Yordam anlamına gelir. Veritabanındaki objelere erişim sağlar. Aslına bakarsanız yordamların yaptığını geliştirdiğiniz uygulamalarda dahi kullanabilirsiniz yani sıfır yordam ile bütün işi tek bi uygulamada kullanabilirsiniz fakat bu tercih edilen birşey değil. Nedeni ise yordamların hazırlanan uygulamalara göre daha performanslı çalışmasıdır. Kendi yapıları içinde kalmaları performans ve güvenlik açısından daha iyi.
Yeni karakter oluşturma yordamının üzerinden gidelim,
Parametreler. Clientten dönen değerler diyebiliriz. Örneğin, @CharID karakter oluşturma ekranında, yeni karakterinize verdiğiniz ad olarak döner. Diğer parametrelerde aynı işlevi görür. (nRet hariç ona daha sonra dönücez.)
View hidden content is available for registered users!
Burada ne yaptık? DECLARE nedir? DECLARE değişkenlerdir. Burada yaptığımız işlemde ACCOUNT_CHAR tablosundan çektiğimiz veriyi değişkenimiz alır ve bu değişkenin aldığı değeri birçok yerde kullanabiliriz.
SET ise adındanda belli olduğu gibi değişkenimizin default değeridir. Genelde default değer değişkeni verdikten sonra SET @Nation = 0 şeklinde kullanılıyor fakat ben bu şekilde kullanmayı tercih ediyorum.
Ve sıra geldi IF'lere şahsen en sevdiğim kısımdır 😛
IF @Nation = 1 AND @Race > 10 eğer hesap karakterleri tablosundan çektiğimiz @Nation değeri 1 (Karus) VE karakter oluşturma ekranında seçtiğimiz Race 10'dan büyük ise client'e nRet = 2 değerini döndür. (El Morad race değerleri 11,12 ve 13'dür.)
ELSE IF @Nation = 2 AND @Race < 10 ise aynı şekilde El Morad için karus race kontrolü yapıyor ve nRet = 2 değeri döndürür. (Karus race değerleri 1,2,3 ve 4'dür.)
ELSE IF @Nation <> 1 AND @Nation <> 2 eğer hesap karakterleri tablosundan çektiğimiz @Nation değeri 1 ve 2'ye eşit değil ise nRet = 2 değeri döndür. Bildiğiniz gibi iki ırk değeri vardır (1-Karus, 2-El Morad).
View hidden content is available for registered users!
Ve yeni karakter oluşturma ekranında, karakterinize vericeğiniz ad/isim kontrolü yapıcağımız bölüme geldik.
DECLARE @Row tinyint yukarıda anlattığım gibi değişkenimiz.
SET @Row = ... buradaki işlem ise yeni karakterimize verdiğimiz isimden kaç adet var ona bakıcaz. COUNT satır sayar, genelde COUNT(*) şeklinde kullanılır, eğer tek sutun kontrol edilecek ise (*) ifadesi yerine sutun adı girilebilir. (*) ifadesi "Tüm sutunları say" anlamına gelir. Karakter bilgileri USERDATA tablomuzda tutulduğu için bu tablodan kontrol yapıyoruz.
Bir altındaki SET @Row += ... ise bana ait bir sistem, NCS kullanımında karakter yeni isim aldıktan sonra karakterin eski ismi bu tabloya girilir bu şekilde NCS basılmış eski isimler kullanılmaz. Tabiki elle girmiyoruz bu isimleri, Oyun için NCS yordamına tek bir satır INSERT işlemi ekleyerek bu sistemi aktif edebilirsiniz. Ayrıca SET @Row += ... buradaki + ifadesi bir üstünde verilen @Row değişkeninin aldığı değeri 2. default değer ile topluyor, bildiğiniz toplama işlemi 😛
IF @Row > 0 her iki tablodan aldığımız veri 0 (sıfır)'dan büyük ise yeni bu isimde karakter var ise nRet = 3 değeri döndür.
View hidden content is available for registered users!
Son kısıma geldik. Zone, PosX, PosZ, PosY değişkenleri yeni karakter açıldığında, karakterin ilk bulunduğu harita ve koordinatların default değeridir. Aşağıdaki koordinatlar USKO'nun osmanlı moradon iki gate arası orjinal koordinatlarıdır, çalabilirsiniz 😛
Aşağıdaki işlemler UPDATE ve INSERT işlemlerimiz. Hesap karakterleri tablosunu günceller ve USERDATA tablomuza yeni karakter bilgilerimizi girer. Hesap karakterleri tablomuza ilk INSERT işlemimiz karakter seçme ekranında yapılır.
TRANSACTION güvenlik duvarımız olarak düşünebilirsiniz 😛 Transaction arasına girilen bütün işlemlerin yapılmasına olanak tanır. Yani "Bütün işlemleri yap eğer yapamassan rollback ile döndür ve diğer işlemleri geçersiz kıl" anlamına gelir.
BEGIN TRAN İşlemi başlat
IF @@ERROR <> 0 Hata sayısı 0 (sıfır)'a eşit değil ise (işlemlerin yarım kalma durumlarında) ROLLBACK yap ve nRet = 4 değeri döndür.
COMMIT TRAN İşlemi tamamla
Eğer işlemler başarı ile sonuçlanır ise nRet = 0 değeri döndürür yani işlem başarılı.
View hidden content is available for registered users!
Not olarak değişkenimize default değerini verirken SET yerine DECLARE @Nation = 0 şeklindede kullanabiliriz.
Aynı zamanda;
tinyint - byte veya uint8
smallint - short veya uint16
char(21) - char(21)
int - int
yukarıdaki değerlerin VC++ 98 veya VSC++ olarak karşılıklarıdır.
For By Katana