• HyperFilter | DoS Protection | DDoS Protection | DoS Mitigation | DDoS Mitigation | AntiDoS | AntiDDoS | Proxy Shielding

Stored Procedure (Saklı Yordam) Yapıları

  • Konbuyu başlatan Konbuyu başlatan Che
  • Başlangıç tarihi Başlangıç tarihi

Che

Kayıtlı Üye
Katılım
3 Nisan 2013
Mesajlar
462
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.)

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
 
Cevap: Stored Procedure (Saklı Yordam) Yapıları



tesekkurler anlatım ıcın cok yararlı oldu benım ıcın.
 
Geri
Üst