! CODEBANK 2012 !
İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.
ÖNEMLİ AÇIKLAMA: MUTLAKA OKUYUNUZ!
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
Örnek 3 Şimdiye kadar yaptığımız SPler Tek kayıt yada tek değer dönderiyordu. SP'den birden çok kayıt alabilmek için sorgumuzu FOR..DO Bloğu içine yazıyoruz. Birden çok kayıt döndüren SPlerde Delphi içinden IBQUERY veya IBDATASET gbi bileşenlerinden birini kullanın . IBSTOREDPROC bileşenini kullanırsanız hata alırsınız. Kod: SQL CREATE PROCEDURE SP_tumunu_Listele RETURNS (AD VARCHAR(15) CHARACTER SET WIN1254, SOYAD VARCHAR(15) CHARACTER SET WIN1254) AS BEGIN FOR SELECT SIRA_NO, ADI, SOYADI FROM MUSTERI INTO :SIRA, :AD, :SOYAD; DO BEGIN suspend; END END hocam yukarıdaki kodda bulunan Kod: SQLINTO :SIRA, :AD, :SOYAD; cumlesinin sonundaki ; varken kod çalışmadı ama kaldırınca promlemsiz çalıştı.anlaşılan o orda fazlalık.bilginize.. ama güzel bir makale olmuş şehsen teşekkür ederim.başarılar dilerim.
Selam,Çok güzel bir döküman, elinize sağlık. Bir ufak hatırlatma yapmak gereği hissettim;AlıntıSP'nin başındaki SET TERM ^ ; ve Stored Procedurenin sonundaki SET TERM ; ^ tanmlamaları SP'nin aktif databaseye ait olduğunu gösterir. End'in sonundaki ^ işareti ise sp nin bittiğini göterir. Buradaki ( ^ ) işareti yerine istediğiniz karakteri kullanabilirsiniz. Varsayyılanı değiştiremenizi tavsiye ederim. Sayfadayer işgal etmemesi için aşağıdaki örneklerde kullanılmamıştır. Burada ifade edilmeye çalışılan, SET TERM ile komut bitiş karakterini set ediyoruz sanırım. Bu karakter daha çok client ile ilgilidir server bununla ilgilenmez. Client (örn isql), girilmiş olan metni ilk önce SQL cümleleri olarak parçalar. Zira bir defada birden fazla komut girmiş olabilirsiniz. Default olarak bunun için ; karakterini kullanır. Böyle bir durumda, eğer default SQL ayıracı değiştirilmemişse, FB engine e bilgi aşağıdaki gibi gidecektir;Kod: SQLCREATE PROCEDURE SP_GUNCELLE ( SIRA INTEGER, AD VARCHAR(15), SOYAD VARCHAR(15)) RETURNS ( SIRAM INTEGER, ADIM VARCHAR(15), SOYADIM VARCHAR(15)) AS BEGIN UPDATE musteri SET SIRA_NO=:SIRA, ADI=:AD, SOYADI=:SOYAD WHERE SIRA_NO=:SIRA; << >> ERRORselect SIRA_NO, ADI, SOYADI FROM MUSTERI where musteri.sira_no=:SIRA into :SIRAM, :ADIM, :SOYADIM; <<>> ERRORsuspend; <<Bu durumdan kaçınmak için alternatif bir ayıraç set ederiz, örneğin SET TERM !!. Bu komutla SQL komutlarımızın !! ile ayrıldığını söylüyoruz. (Dikkat, database e değil, SQL cümlemizi alıp ona gönderecek client a söylüyoruz bunu zira parse işlemi orada yapılıyor) Bu durumda;Kod: SQLCREATE PROCEDURE SP_GUNCELLE ( SIRA INTEGER, AD VARCHAR(15), SOYAD VARCHAR(15)) RETURNS ( SIRAM INTEGER, ADIM VARCHAR(15), SOYADIM VARCHAR(15)) AS BEGIN UPDATE musteri SET SIRA_NO=:SIRA, ADI=:AD, SOYADI=:SOYAD WHERE SIRA_NO=:SIRA; SELECT SIRA_NO, ADI, SOYADI FROM MUSTERI WHERE musteri.sira_no=:SIRA INTO :SIRAM, :ADIM, :SOYADIM; suspend; ..... !! << >> CREATED CREATE PROCEDURE SP_KAYDET ( ..... !! << >> CREATED CREATE PROCEDURE SP_SIL ( ..... !! << >> CREATEDSeklindeki bir metni client, 3 ayrı komut olarak algılayacaktır zira !! ifadesini bitiş karakteri olarak set etmiştik. Bu karakter set iken kullanacağınız tüm SQL cümleleri bununla bitmelidir. Misal;commit!!gibi. Tabi alışıldık ; a dönmek daha konforlu olacağından en sonunda;SET TERM ;!!diyerek ayıracı tekrar ; haline getiririz.-----Çalışmalarınızın devamını bekliyoruz, kolay gelsin.
SP'nin başındaki SET TERM ^ ; ve Stored Procedurenin sonundaki SET TERM ; ^ tanmlamaları SP'nin aktif databaseye ait olduğunu gösterir. End'in sonundaki ^ işareti ise sp nin bittiğini göterir. Buradaki ( ^ ) işareti yerine istediğiniz karakteri kullanabilirsiniz. Varsayyılanı değiştiremenizi tavsiye ederim. Sayfadayer işgal etmemesi için aşağıdaki örneklerde kullanılmamıştır.