Stored Procedure'de update

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
selm@n
Kıdemli Üye
Mesajlar: 442
Kayıt: 01 Oca 2004 11:52
Konum: Adapazarı
İletişim:

Stored Procedure'de update

Mesaj gönderen selm@n »

SelamunAleykum;

Aşağıdaki SP'yi tek bir personel için çalıştıra biliyorum...istediğim tüm personel için bu SP yi çalıştırmak.. bir kaç tane deneme yaptım ama bir türlü çözemedim acaba select cümlesi içinde olurmu bir fikir verirseniz sevinirim..

VT (FireBird 1.5)

Tek Personel için çalışan SP

Kod: Tümünü seç

declare variable i_gir_tarihi date;
declare variable gun integer;
declare variable s1  integer;

begin

   select P.P_IGT
   from PERSONEL P
   where P.P_SICIL = 1
into :i_gir_tarihi;

 gun=(current_date - :i_gir_tarihi) / 180;
  if (gun > 10) Then
      Begin
           s1=((gun - 10) * 2) + 10;
      end
  else
      begin
           s1=:gun;
      end

update MAAS M set
M.C_P = :s1
where M.P_SICIL = 1;

end
teşekkürler..
;)
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

hocam soyle yapabilirsin

Kod: Tümünü seç

declare variable i_gir_tarihi date;
declare variable gun integer;
declare variable s1  integer;
declare variable p_sicil_no integer;
begin
   for select P.P_SICIL from PERSONEL P into :p_sicil_no do
   begin
       select P.P_IGT from PERSONEL P
       where P.P_SICIL = :p_sicil_no
       into :i_gir_tarihi;
    
         gun=(current_date - :i_gir_tarihi) / 180;
          if (gun > 10) Then
              Begin
                   s1=((gun - 10) * 2) + 10;
              end
          else
              begin
                   s1=:gun;
              end
        
        update MAAS M set
        M.C_P = :s1
        where M.P_SICIL = :p_sicil_no;
   end
end
klasik for dongusu gibi sıra ile tum personeller icin update yapacak
ÜŞENME,ERTELEME,VAZGEÇME
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

Kod: Tümünü seç

UPDATE MAAS M SET C_P =
(SELECT
CASE
    WHEN ((current_date - P.P_IGT) / 180) > 10 THEN
          ((((current_date - P.P_IGT) / 180) - 10) * 2) + 10
    ELSE  ((current_date - P.P_IGT) / 180)
END
FROM PERSONEL P WHERE P.P_SICIL = M.P_SICIL)
Elimde veri olmadığından test edemedim ama bu şekilde çalışır diye düşünüyorum.

Kolay gelsin,
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
selm@n
Kıdemli Üye
Mesajlar: 442
Kayıt: 01 Oca 2004 11:52
Konum: Adapazarı
İletişim:

Mesaj gönderen selm@n »

Gokmen hocam böylesini hiç düşünemedim..abi bende şöyle bir huy var bir problem var diyelim bu problemi aşana kadar başka bir adıma geçemiyorum.huyum kurusun...

kafamda hep Dogan hocanın yazmış olduğu gibi bir şeyler tasarlıyordum ama nasıl sorusu vardı o da doğan hocam sayesinde kalktı (select içinde CASE olayı ) her iki yollada problem çözüldü..

Allah hepinizden razı olsun...
;)
Cevapla