declare cursor hakkında

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kullanıcı avatarı
armadillo
Üye
Mesajlar: 67
Kayıt: 07 Tem 2005 01:16
Konum: Antalya

declare cursor hakkında

Mesaj gönderen armadillo »

fire bird de view içerisinde cursor deklare edebiliyormuyuz yaptığım bütün denemeler hata ver di örnek verebilecek olan var mı
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Firbird'de Cursor tanımlanabiliyor ancak sanırım siz bu Cursor'ları SP içinde veya Delphi içinden kullanmak istiyorsunuz. Hep karıştırıyorum, CURSOR'lar D-SQL'de geçerli değil P-SQL'^de geçerli. (Yada tersi :) )

Yani birinde geçerli değil ve o geçerli olmayan yer bizim istediğimiz yer.

Ben de çok uğraşmıştım ama bulamamıştım. SOnunda dokumanlarına rastladım.
Eğer C veya benzeri bir dil kullanıyorsanız CURSOR kullanabiliyorsunuz ama Delphi'den veya SP'lerin içinden hazırlamak mümkün değil (Henüz)

Sanırım Feature Requestlerde bunlar planlanıyor.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
armadillo
Üye
Mesajlar: 67
Kayıt: 07 Tem 2005 01:16
Konum: Antalya

Mesaj gönderen armadillo »

benim asıl sıkıntım tablomdaki aktif kayıtttan bir önceki kaydı seçmek cursor ile bunun yapıldığını okudum. forma yazdım ama bir cevap alamadım.

view içerisinde yapmak istediğim aktif kayıt ile bir önceki kaydın farkını almak tabiki bu kullanıcının tercihine bağlı olarak 5 satırda 50 satırda olabilir o sebepten bir önceki kaydı sorgu ile değil başka bir yöntem ile seçmem gerekiyor. :roll:
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Önceki kayıtı bulmanın bir yöntemi de tersten (order by alan DESC ile) sıralatıp bir sanraki kayıta geçince normalde önceki kayıta konumlanmış olunuyor :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
armadillo
Üye
Mesajlar: 67
Kayıt: 07 Tem 2005 01:16
Konum: Antalya

Mesaj gönderen armadillo »

hocam sql i yeni öğrenen birisine göre açıklayarak anlatırsanız sevinirim. sonraki kaydı nasıl seçeceğim anlamadım :oops:
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Dediğim gibi sadece normal şekilde baştan sona doğru olan sıralamayı sondan başa doğru yaptıracaksınız. Ve program içinden de bir sonraki deyip aslında bir önceki kayıta ulaşmış olacaksınız. Gerçi kullanacağınız DataSet lerde önceki kayıta (DataSet.Prior) ile de ulaşabilirsiniz :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Böyle ilginç bir isteği ya detaylı tanımlayabilirsen (yani tarif edebilirsen) bize belki direk SQL'le tabloyu kendi kendine join ederek veyahut Result Set döndüren (SUSPEND) Stored Procedure'de For Select döngüsü ile yapabilirsin.

İyi çalışmalar.
Kullanıcı avatarı
armadillo
Üye
Mesajlar: 67
Kayıt: 07 Tem 2005 01:16
Konum: Antalya

Mesaj gönderen armadillo »

sanırım anlatamadım hocam yapmak istediği sql kodları içerisinde view oluşturarak bu işlemi ( yani aktfi kayıt ile önceki kaydın farkını alıp göstermek) yani serverda view içerisinde olacak bu olay :)
Kullanıcı avatarı
armadillo
Üye
Mesajlar: 67
Kayıt: 07 Tem 2005 01:16
Konum: Antalya

Mesaj gönderen armadillo »

viewtopic.php?t=16386&highlight=view

hocam bu soruyu doğuran sorun ayrıntılı olarak yukarıdaki linkte
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Şu kodda ki mantığı kavrayabilirsen isteğini gerçekleştirebilirsin (COALESCE'li satırı):

Kod: Tümünü seç

SELECT
  T1.TARIH,
  COALESCE(T1.TUKETIM, 0) - COALESCE((SELECT FIRST 1 T2.TUKETIM FROM TABLO1 T2 WHERE T2.TARIH < T1.TARIH ORDER BY T2.TARIH DESC), 0),
  ...
FROM TABLO1 T1
İyi çalışmalar.
Kullanıcı avatarı
armadillo
Üye
Mesajlar: 67
Kayıt: 07 Tem 2005 01:16
Konum: Antalya

Mesaj gönderen armadillo »

hocam kodu aşağıdaki gibi uyarladım ama istediğim sonuç olmadı.
siz kodları yanılmıyorsam 2 ayrı tablo için yazmışsınız. ama veriler aynı tabloda

create view "tuketim"("Tarih","tuketim" )
as
select
elektrik_aktif.tarih,COALESCE(elektrik_aktif.aktif, 0) - COALESCE((SELECT FIRST 1 elektrik_aktif.aktif FROM elektrik_aktif WHERE elektrik_aktif.tarih < elektrik_aktif.tarih ORDER BY elektrik_aktif.tarih DESC), 0)
FROM elektrik_aktif;

:(
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Ben aynı tablo için yazdım. Yani doğru. Yaptığın hata tablo için ALIAS tanımlamanda. View'i şuna benzer şekilde düzenlersen düzelecektir:

Kod: Tümünü seç

create view "tuketim"("Tarih","tuketim" ) 
as
select
T1.tarih, COALESCE(T1.aktif, 0) - COALESCE((SELECT FIRST 1 T2.aktif FROM elektrik_aktif T2 WHERE T2.tarih < T1.tarih ORDER BY T2.tarih DESC), 0)
FROM elektrik_aktif T1; 
T1 ve T2'ye dikkat edin.

İyi çalışmalar.
Kullanıcı avatarı
armadillo
Üye
Mesajlar: 67
Kayıt: 07 Tem 2005 01:16
Konum: Antalya

Mesaj gönderen armadillo »

hocam eline sağlık senin için ne yapsam azdır bu olay 2 haftadır kafayı yedirmişti gecenin bu vaktinde vakit harcadığın için teşekkürler

bir ara olayın mantığınıda açıklarsan çok sevinirim.

Saygılarımla U.İsmail YILDIRIM
Kullanıcı avatarı
armadillo
Üye
Mesajlar: 67
Kayıt: 07 Tem 2005 01:16
Konum: Antalya

Mesaj gönderen armadillo »

hocam ems manager bu COALESCE ve alias tanımlamayı desteklemiyormu iş yerinde ibexpert kullanıyorum dün gece sorunsuz çalıştı ama evde çalıştıramadım bir türlü
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

armadillo yazdı:hocam ems manager bu COALESCE ve alias tanımlamayı desteklemiyormu iş yerinde ibexpert kullanıyorum dün gece sorunsuz çalıştı ama evde çalıştıramadım bir türlü
ems manager'in ne olduğunu bilmiyorum, ancak COALESCE ve alias olayı FireBird'ün versiyonu ile ilgili. Versiyonu eski bir FireBird yüklü gibi gözüküyor.

İşin mantığı aslında tamamen düz mantık. SQL'in sınırlarını az buçuk bildiğin taktirde düz mantıkla birçok şeyi yapabiliyorsun. Artık FireBird 2.0'da SUB Select query'lerini de kullanabiliyorsun. SUB Select, CASE WHEN ve COALESCE kavramları bir çok işinizi inanılmaz derecede kolaylaştırıyor. Öyleki ben şahsen neredeyse SP ve View hiç kullanmıyorum.

İyi çalışmalar.
Cevapla