StoredProc ile DataSet almak

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

StoredProc ile DataSet almak

Mesaj gönderen gkimirti »

son gunlerde sorular sp ler uzerine yogunlasmısken bi soruda ben sorayım
su an icin boyle bir gereksinimim yok ama parametreli query yerine kullanılabilirrmi diye yuksek sesle sordum kendime
sıradan sabit denus degeri olan bir sp

Kod: Tümünü seç

SET TERM ^^ ;
CREATE PROCEDURE P_EVRAKNO returns (
  EVR_NO Integer)
AS
BEGIN
/*EN SON ACIK EVRAK NO */
SELECT  MAX(EVR_NO)FROM  EVRAK WHERE EVR_KAPALI=0 INTO :EVR_NO;
END
^^
SET TERM ; ^^
EVR_NO donus degeri ve Integer
peki bir degilde birden fazla kayıt yani bir dataset dondurme olayı nasıl yapılr

Kod: Tümünü seç

SET TERM ^^ ;
CREATE PROCEDURE P_EVRAK returns (
  EVR_DATASET ?)
AS
BEGIN
SELECT  EVR_NO FROM  EVRAK INTO :EVR_DATASET;
END
^^
SET TERM ; ^^

eger soru isareti yerine bir sey yazabilirsek boyle bir kullanım olabilirmi
ÜŞENME,ERTELEME,VAZGEÇME
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

merhabalar,
Bu bir soru mu cevap bı anlayamadım.
Açıklamanız mümkün mü?
saygılar
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

sp

Mesaj gönderen aslangeri »

Eğer bu sorun interbase içinse bu şekilde halledebilmen lazım

Kod: Tümünü seç

CREATE PROCEDURE P_EVRAKNO returns ( 
  EVR_NO Integer) 
AS 
BEGIN 
/*EN SON ACIK EVRAK NO */ 
for/*döngü ile*/
SELECT  MAX(EVR_NO)FROM  EVRAK WHERE EVR_KAPALI=0 INTO :EVR_NO; 
do 
begin 
/*döngü içinde karşılarştırma işlemleri de yapabilirsin
başka tablolardan kayıtlarda seçebilirsin onları geriye döndürebilirsinde.*/
suspend; /*bu komut ile verileri döndürüyor*/
end
END 
İyi çalışmalar
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

saolasın aslangeri

Kod: Tümünü seç

CREATE PROCEDURE P returns (
  EVR_NO Integer)
AS
BEGIN
 FOR SELECT  EVR_NO FROM  EVRAK ORDER BY EVR_NO INTO :EVR_NO DO
 BEGIN
   SUSPEND;
 END
END
bu sekilde sorunsuz calısıyor
benim bunu yapmaktaki dusuncem 3-5 kritere gore sorgu olustururken bazı parametreleri vermedigimiz zamanlar olusan sorunları yok etmek
mesela bu sp nin 3 giris parametresi var ve 2 elemanlı bir dataset dondursun
ilk once parametreleri kontrol edecek ona gore sorgu olusturacak ve for select ile cevabı dondurecek
simdi bu tarz bir yaklasım
klasik query yaklasımından daha mı yavas calısır?
+ları ve -leri nelerdir...
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

+ ları ve - lerini tam olarak bilmiyorum ama başka alternatifde aklıma gelmiyor. :oops:
iyi çalışmalar
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Aynı isi yapacak bir query'yi Delphi tarafindan runtime da olusturarak veya bir TQuery nesnesinin icine design time'da yazarak calistirmak ile aynı kodu bir stored procedure olarak yazmak arasinda az da olsa SP'un daha performanslı calismasi gibi bir avantaj vardir.

Zira SP'nin butun kodu zaten veritabanı tarafindadir. Oysa diger durumda once kodun kendisi veritabanına godnerilir. SP'de giden sadece parametrelerdir.

Ayrica SP compile edilmis bir koddur. Query plan'i hazirdir. diger durumda query optimizer query uzerinde biraz mesgul olur.

Bunlar lokal networklerde belki de pek farkedilmeyen performans farkları olmakla birlikte bir onemli diger avantaj da eger kodunuz biraz kompleks ise mesela bir baska select ile alinacak bir degerinkullanılacagi ikinci bir select veya baska bir kod varsa kesin olarak SP ile daha az satirda ve daha sade bir kod ile isi halledersiniz....
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

öncelikle hosgeldin fahrettin abi,
yukarıda dedigim gibi bir sp yazıp dbworkbench de calıstırdım tahmin ettigim bir result seti gordum
ama
delphi de ibx sp componentine bu proceduru gosterip
AddFields dedigimde sadece for do icindeki alanları gosteriyor
neyse bende sildim pek hosuma gitmemisti bu yontem...
query ile yapacagım artık
ÜŞENME,ERTELEME,VAZGEÇME
Cevapla