sql editorde while kullanma
-
- Üye
- Mesajlar: 83
- Kayıt: 28 Ara 2017 04:14
- İletişim:
sql editorde while kullanma
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
bunun icin while dongusu kullanmak gerekiyormus
ornekleri denemeye calistigimda @ isaretini tanimiyor degisken tanimlamada hata aliyoprum
neyi yanlis yapiyorum acaba
saygilarimla
Re: sql editorde while kullanma
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.
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ı.
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;
Örnek SQL daha yukarıda bahsettiğim gibi script işleyen bir bileşen kullanarak çalıştırılmalı.
-
- Üye
- Mesajlar: 83
- Kayıt: 28 Ara 2017 04:14
- İletişim:
Re: sql editorde while kullanma
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
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
-
- Üye
- Mesajlar: 83
- Kayıt: 28 Ara 2017 04:14
- İletişim:
Re: sql editorde while kullanma
yapmaya calistigim sey resimdeki gibi arkadaslar
80 kere kod yazmak yerine daha kolay bir cozum var mi
saygilar
80 kere kod yazmak yerine daha kolay bir cozum var mi
saygilar
- Dosya ekleri
-
- SSS.jpg (2.71 KiB) 8961 kere görüntülendi
Re: sql editorde while kullanma
Merhaba,
Resim maalesef gözükmüyor. Çok küçük. Stored Procedure kodlarını paylaşabilirseniz bilen arkadaşlar yardımcı olmaya çalışabilir.
Resim maalesef gözükmüyor. Çok küçük. Stored Procedure kodlarını paylaşabilirseniz bilen arkadaşlar yardımcı olmaya çalışabilir.
-
- Üye
- Mesajlar: 83
- Kayıt: 28 Ara 2017 04:14
- İletişim:
Re: sql editorde while kullanma
forumdan gelen degıskenler
gbid nvarchar
kim integer
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
Re: sql editorde while kullanma
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;
Ö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;
-
- Üye
- Mesajlar: 83
- Kayıt: 28 Ara 2017 04:14
- İletişim: