sql editorde while kullanma

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
sadikacar60
Üye
Mesajlar: 83
Kayıt: 28 Ara 2017 04:14
İletişim:

sql editorde while kullanma

Mesaj gönderen sadikacar60 »

arkadaslar tabloya S1-S10 a kadar alan adi ekletmek icin denemeler yapiyorum
bunun icin while dongusu kullanmak gerekiyormus
ornekleri denemeye calistigimda @ isaretini tanimiyor degisken tanimlamada hata aliyoprum
neyi yanlis yapiyorum acaba
saygilarimla
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: sql editorde while kullanma

Mesaj gönderen ertank »

Merhaba,

Tabloya kolon eklemek için SCRIPT çalıştırma özelliği olan bileşenler kullanmanız gerekir. Ayrıca, Firebird henüz "yoksa ekle" (IF NOT EXISTS) ifadelerini desteklemiyor. Bu yüzden önce mevcut olup olmadığını kontrol edip yok ise eklemeniz gerekir.

Tablo adınızın MYTABLE olduğunu varsayarsak. S1-S10 kolonlarının integer veri türünde olduğunu varsayarsak aşağıdaki gibi bir script çalıştırarak S1 kolonu yok ise ekleyebilirsiniz.

Kod: Tümünü seç

set term ^ ;
execute block as
begin
  if (not exists(select 1 from rdb$relation_fields rf where rf.rdb$relation_name = 'MYTABLE' and rf.rdb$field_name = 'S1')) then
    execute statement 'alter table mytable add s1 integer';
end^
set term ; ^

commit;
if satırındaki MYTABLE ve S1 büyük harfle yazılmak zorunda. execute statement içindeki ifadeler için örnekteki kullanımda büyük küçük farketmez.

Örnek SQL daha yukarıda bahsettiğim gibi script işleyen bir bileşen kullanarak çalıştırılmalı.
sadikacar60
Üye
Mesajlar: 83
Kayıt: 28 Ara 2017 04:14
İletişim:

Re: sql editorde while kullanma

Mesaj gönderen sadikacar60 »

update pdf_dc_adet set S1=S1+1 where BID=:gbid;

procedures yukardaki kodda calisiyor store procedure 2 adet data geliyor birincisi gbid degiskeni burda sorun yok
ikincisi kim degiskeni kim degiskeni integer mesela S9 da gunceleme yapacaksak kim=9 gonderiyorum.
hucrenin degerini arttirmak icin S+kim=S+kim+1 seklinde bir kod kullanmak lazim ama dogru kullanma seklini bulamadim
saygilar
sadikacar60
Üye
Mesajlar: 83
Kayıt: 28 Ara 2017 04:14
İletişim:

Re: sql editorde while kullanma

Mesaj gönderen sadikacar60 »

yapmaya calistigim sey resimdeki gibi arkadaslar
80 kere kod yazmak yerine daha kolay bir cozum var mi
saygilar
Dosya ekleri
SSS.jpg
SSS.jpg (2.71 KiB) 224 kere görüntülendi
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: sql editorde while kullanma

Mesaj gönderen ertank »

Merhaba,

Resim maalesef gözükmüyor. Çok küçük. Stored Procedure kodlarını paylaşabilirseniz bilen arkadaşlar yardımcı olmaya çalışabilir.
sadikacar60
Üye
Mesajlar: 83
Kayıt: 28 Ara 2017 04:14
İletişim:

Re: sql editorde while kullanma

Mesaj gönderen sadikacar60 »

forumdan gelen degıskenler
gbid nvarchar
kim integer

Kod: Tümünü seç

begin
  /* Procedure Text */
  if (KIM=1) then update pdf_dc_adet set S1=S1+1 where BID=:gbid;
  if (KIM=2) then update pdf_dc_adet set S2=S2+1 where BID=:gbid;
  if (KIM=3) then update pdf_dc_adet set S3=S3+1 where BID=:gbid;
  if (KIM=4) then update pdf_dc_adet set S4=S4+1 where BID=:gbid;

  if (KIM=80) then update pdf_dc_adet set S80=S80+1 where BID=:gbid;

end
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: sql editorde while kullanma

Mesaj gönderen ertank »

Aşağıdaki örneği kullanarak kendinize uyarlayabilirsiniz.
Örnek NULL kontrolü yapmıyor. NULL bir değer için çalışır ise sonuç 1 değil yine NULL olacaktır. Siz öncesinde gerekli kontrolleri veya veritabanı seviyesinde NULL olmama koşulunu eklemelisiniz.

set term ^;
execute block as
declare deger varchar(50);
begin
for select cast(2 as varchar(50)) from rdb$database into :deger do
execute statement 'update abc set S' || :deger || '=S' || :deger || '+1';
end^
set term ; ^

commit;
sadikacar60
Üye
Mesajlar: 83
Kayıt: 28 Ara 2017 04:14
İletişim:

Re: sql editorde while kullanma

Mesaj gönderen sadikacar60 »

tesekkurler hocam saygilar
Cevapla