Firebird - Stored procedure e join çekmek

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
onaydin

Firebird - Stored procedure e join çekmek

Mesaj gönderen onaydin »

Mesela bir mesai hareket tablomuz var bunun sonucunu
01.06.2004 -- --
02.06.2004 -- --
şeklinde
takvim tablosuna bağlayıp günleri takvim tablosundaki gun alanı ile mesai
tablosundaki gun alanına left join yaparak ilişkilendiriyouz

procedure join çekerek bunu takvim tablosu olmadan da yapmak mükün hale geliyor şöyleki

Kod: Tümünü seç

CREATE PROCEDURE SP_TARIH (
  AY Numeric(2,0),
  YIL Numeric(4,0))
 returns (
  GUN Date)
AS
declare variable TMP_AY_SONU DATE;
declare variable D date;
declare variable LDM numeric(2,0);
declare variable S numeric(2,0);

begin
 D = cast('01.'||AY||'.'||YIL as date);
 TMP_AY_SONU =   D - EXTRACT(DAY FROM D) + 32;
 LDM  = cast(EXTRACT(DAY FROM (TMP_AY_SONU - EXTRACT(DAY FROM TMP_AY_SONU))) as INTEGER);


 S = 1 ;

 while (S <= LDM)  do
  begin
   gun = cast(s ||'.'||AY||'.'||YIL  as DATE);

   S = S + 1;
   suspend;
  end

end
bunu select GUN SP_TARIH(AyDegeri,YilDegeri) diye çağırıyoruz
bize o aydaki günleri döndürüyor
sonucun selectide soyle

Kod: Tümünü seç

select TARIH.GUN,m.MESAI_ID,m.TARIH_SAAT,m.TIP,
       (case
        WHEN (EXTRACT(WEEKDAY FROM GUN - 1)+1)  > 5
         THEN 0
         ELSE 1
        END) as GUN_DURUMU
       from SP_TARIH (6,2004)  TARIH
 left join "mesai" m
 on TARIH.GUN = "mesai".TARIH_GUN
 /*where
   TARIH.GUN < '08.06.2004' */
   order by TARIH.GUN,m.TARIH_SAAT
şeklinde oluşturulabiliyor

ikinci bir durumda firebird de select * from (select * from Table)
ifadesi gibi, from dan sonra subquery nin kullanılması (derived table deniliyormuş) desteklenmiyor bildiğim kadarıyla

işte burda
ici bos bir procedura EXECUTE STATEMENT içine parametreyle gonderilecek sql kodunu gondermek mümkün oluyor donen select listesinide table mış gibi davranmak mümkün oluyor.
(Yalnız where a = 'asd') gibi tırnaklı ifadeler nasıl çalışır orasını bilmiyorum.
Cevapla