FireBird 1.5 ipuçları

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

FireBird 1.5 ipuçları

Mesaj gönderen oguzozturk74 »

CASE internal function : Bir kolonun (alan) sonucunu , bir CASE ifadesinin sonucuna göre bulabiliriz..

Kod: Tümünü seç

SELECT
            o.ID, o.Description,
            CASE o.Status
              WHEN 1 THEN 'confirmed'
              WHEN 2 THEN 'in production'
              WHEN 3 THEN 'ready'
              WHEN 4 THEN 'shipped'
              ELSE 'unknown status ''' || o.Status || ''''
            END
          FROM   Orders o

Kod: Tümünü seç

SELECT
            o.ID, o.Description,
            CASE
              WHEN (o.Status IS NULL) THEN 'new'
              WHEN (o.Status = 1) THEN 'confirmed'
              WHEN (o.Status = 3) THEN 'in production'
              WHEN (o.Status = 4) THEN 'ready'
              WHEN (o.Status = 5) THEN 'shipped'
              ELSE 'unknown status ''' || o.Status || ''''
            END
          FROM   Orders o
-----------------------------------------------------------------------------------------------------------------------------

Universal triggers : Tek bir trigger birden fazla olay için tetiklenebilir..

Kod: Tümünü seç

CREATE TRIGGER my_trigger FOR my_table BEFORE INSERT OR UPDATE
          AS BEGIN
            IF (NEW.DOC_ID IS NULL) THEN
              EXCEPTION my_exception;
          END
Örnekte ilgili kod hem BEFORE INSERT hem de BEFORE UPDATE için kullanılıyor.

-----------------------------------------------------------------------------------------------------------------------------

Triggers improvement.: Runtime da trigger tipinin ne olduğu belirlenebilir..(INSERTING/UPDATING/DELETING )

Kod: Tümünü seç

if (INSERTING) then
          new.OPER_TYPE = 'I';
        else
          new.OPER_TYPE = 'U';
-----------------------------------------------------------------------------------------------------------------------------

COALESCE internal function : İlgili kolon değerini birden fazla ifade için hesaplayabiliriz. NULL değer döndürmeyen ilk ifade ilgili kolonumuzun değerini verir.

COALESCE (value {, value} ... )

COALESCE (V1, V2) ifadesi şuna eşittir :

Kod: Tümünü seç

 CASE WHEN V1 IS NOT NULL THEN 
                V1 
             ELSE V2 
             END
Bunun anlamı; kolonumuzun değeri, eğer V1 null değilse V1 değeridir, yoksa (V1 değeri null ve V2 değeri null değilse) V2 değerini alır.

COALESCE (V1, V2, ..., Vn), n >= 3 için bu ifade şuna eşittir :

Kod: Tümünü seç

 CASE WHEN V1 IS NOT NULL THEN 
                V1 
             ELSE 
                COALESCE (V2, ..., Vn) END

Kod: Tümünü seç

SELECT
          PROJ_NAME AS Projectname,
          COALESCE(e.FULL_NAME, '[> not assigned <]') AS Employeename
        FROM
          PROJECT p LEFT JOIN EMPLOYEE e ON (e.EMP_NO = p.TEAM_LEADER)
---------------------------------------------------------------------------------------------------------------------------

NULLIF internal function :

Kod: Tümünü seç

Syntax:
        NULLIF (value, value)

Kod: Tümünü seç

NULLIF (V1, V2) ifadesi şuna eşittir :
          CASE WHEN V1 = V2 THEN NULL 
          ELSE V1 END
Bu şu demek: eğer V1=V2 ise değerimiz NULL oluyor demektir. Aksi halde değerimiz V1 dir.

Kod: Tümünü seç

 UPDATE URUN
          SET STOKNO = NULLIF(STOKNO, 0)
Burada STOKNO null dan farklı ilk değeri alır. Yani eğer STOKNO null ise 0 değerini alır. Yok eğer STOKNO değeri null değilse STOKNO değerini alır.

Saygılar .... Sevgiler.... :D
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

bu faydalı ipuçları için tesekkurler oguz,
su UniversalTrigger ilgimi cekmedi desem yalan olur :lol:
aynı islemi 3 triggera da yazmak bana da sacma gelmisti ama o sekilde yapmıstım :oops:
ÜŞENME,ERTELEME,VAZGEÇME
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Ne demek Gökmen abi, :D
Cevapla