Mevlüt Becerikli

Basit diye bir ÅŸey yok !!! Bilmeyene 2+2 bile zor…

AÄŸustos 2009 için arsiv

ROWNUM & DUAL

Yazan: Mevlüt Becerikli Tarih: Ağu 28th, 2009 | Kategori:: Oracle, PL/SQL, SQL, Veritabanı

Bir forumda şöyle bir soru sulmuştu. 2 tarih arasındaki tarihlerin listesini nasıl alabilirim. Önce WHERE ifadesine koyacaksa neden istiyor, BETWEEN kullansın dedim ama yazışmamalar devam ettikçe şunu gördüm ki test datası oluşturmak içinmiş. Mesela 2/12/2006 ile 5/12/2006 arasındaki günleri istediğimde sonuç olarakşunu bekliyordu.

2/12/2006
3/12/2006
4/12/2006
5/12/2006

Aklıma bir önceki yazımda ki CONNECT BY ifadesini kullanamak geldi desem yalan olur :-)

SELECT ROWNUM FROM DUAL CONNECT BY ROWNUM<5;

Başka bir üye de yukarıdaki SQL in sonuçlarından yola çıkarak aşağıdaki SQL ile gayet güzel çözüm üretti :

SELECT (date ‘2006-12-02′) + ROWNUM - 1
FROM dual
CONNECT BY ROWNUM <= ((date ‘2006-12-05′) - (date ‘2006-12-03′) + 1)

Tamam! Adamı kutlamak lazım. Test datası oluşturmak için güzel bir yöntem. Ama aklıma bir soru takıldı :

DUAL tablosunda kaç tane kayıt var ???

Bu ünlü tablonun içeriğine baktım :

SELECT * FROM dual;

DUMMY
—–
X

SELECT ROWNUM FROM dual;

ROWNUM
——
1

Kayıtları çoklayalım :)

SELECT ROWNUM FROM DUAL CONNECT BY ROWNUM<5;

ROWNUM
———-
1
2
3
4
5

Eee! Sadece 1 kayıt vardı. Şimdide maksimum ROWNUMı soralım.

SELECT MAX(ROWNUM) FROM dual CONNECT BY ROWNUM <5;

MAX(ROWNUM)
———–
5

Umarım olay anlaşılmıştır….

İyi Çalışmalar…


Oracle SQL’ de aÄŸaç yapısı (CONNECT BY)

Yazan: Mevlüt Becerikli Tarih: Ağu 28th, 2009 | Kategori:: Oracle, PL/SQL, SQL, Veritabanı

Eğer tablomuz hiyerarşik bir veri yapısına (Örneğin Tree yapısı) sahip ise, verinizi hiyerarşisindeki sırasına göre getirmeniz mümkün. Aşağıdaki gibi bir veri yapımız oldugunu düşünelim.

İsterseniz SQL ifadeleri üzerinden gidelim ve sonuçlarını inceleyelim. Yukarıdaki yapıyı Oracle’ daki bir tabloda ÅŸu ÅŸekilde tutalım.

SQL 1 :
SELECT name, id, parent FROM test_table

Görüldüğü gibi veri yapımızı soyaÄŸacı yapımıza göre tasarladık…

SQL 2 :
SELECT name, id, parent
FROM test_table
CONNECT BY PRIOR id = parent;

CONNECT BY PRIOR ile her veri satırına ait olası tüm ağaç ve alt ağaç yapılarını veren bir sonuç kümesi mevcut. Bu sonuç biraz karmaşık gelebilir. Bir başlangıç noktası belirtmek istersek;

SQL 3 :
SELECT name, id, parent
FROM test_table
CONNECT BY PRIOR id = parent
START WITH parent = 0

START WITH ifadesi ile “0″ yani aÄŸacımızın en tepesinde bulunan Büyükannemize ait alt kırılımları görüyoruz. Bu sonuç kümesini daraltmış olsada karmaşıklıgı ortadan kaldırmadıgını varsayalım ve verimizi biraz daha anlandırmak adına Oracle ın nimetlerinden faydalanalım;

SQL 4 :
SELECT name, id, parent, SYS_CONNECT_BY_PATH(name, ‘ > ‘) AS yol
FROM test_table
CONNECT BY PRIOR id = parent
START WITH parent = 0;

Yol sütunumuzdan da anlaşılacagı gibi Ayşe büyükannemizin kendinden ufak olan aile fertlerini soyagacımız da ki yapıya uygun olacak şekilde anlamlaştırdık. Peki PRIOR ifadesinin yerini değiştirirsek ne olur ?

SQL 5 :
SELECT name, id, parent, SYS_CONNECT_BY_PATH(name, ‘ > ‘) AS yol
FROM test_table
CONNECT BY id = PRIOR parent
START WITH parent = 0;

Demek ki PRIOR ifadesi CONNECT BY ile verilen şartta kendinden önceki ağaç seviyelerini baz alacagını bize veriyor. Burada da PARENT=0 diye bir başlangıç noktası verdiğimiz  ve PARENT alanını baz aldıgımız için kendi ve kendinden öncesini getirmiş oldu. Sql ifademizi biraz daha renklendirelim;

SQL 6 :
SELECT name, id, parent, CONNECT_BY_ISLEAF AS yaprak, LEVEL AS seviye
FROM test_table t
START WITH parent = 0
CONNECT BY PRIOR id = parent

Bu son ifade de yeralan CONNECT_BY_ISLEAF ifadesi ile ilgili kaydın aÄŸaç yapımızda ki son veri (Bir aÄŸaçtaki son uzuv yaprak olmasından feyz alınarak) ise de “1″ deÄŸerini, kendine ait alt bir verisi varsa da “0″ degerini döndürür. Bir diÄŸer ifade olan LEVEL ile de büyükannemize olan birim uzaklık deÄŸerini alıyoruz.

Var mı sorusu olan ????

İyi Çalışmalar…


Oracle’ da Analitik Fonksiyonlar - LAG & LEAD

Yazan: Mevlüt Becerikli Tarih: Ağu 26th, 2009 | Kategori:: Oracle, PL/SQL, SQL, Veritabanı

LAG : Bir oracle veritabanı tablosundaki kayıt için, kendinden önceki kayda ait bilgiye ulaşmamızı sağlar. Hemde herhangi bir join  (SELF JOIN) işlemine tabi tutmadan. Kullanımı;

LAG( expression [, offset [, default] ] )
OVER ( [ query_partition_clause ] order_by_clause )

LEAD: Bir oracle veritabanı tablosundaki kayıt için, kendinden sonraki kayda ait bilgiye ulaşmamızı sağlar. Hemde herhangi bir join  (SELF JOIN) işlemine tabi tutmadan. Kullanımı;

LEAD ( expression [, offset [, default] ] )
OVER ( [ query_partition_clause ] order_by_clause )

expression : sütun ismi belirtiyoruz.
offset : kaç kayıt öncesini istiyorsak onu bildiriyoruz.
default : ilk kayıt için önceki kayıt olmadııg için bu durumda gelecek ifadeyi veriyoruz.

Örnek Kullanım :

SELECT LAG(IL_KODU, 1, ‘-’) OVER (ORDER BY a.IL_KODU ASC) AS ONCEKI_KOD,
LAG(IL_ADI, 1, ‘-’) OVER (ORDER BY a.IL_KODU ASC) AS ONCEKI_AD,
a.IL_KODU AS MEVCUT_KOD,
a.IL_ADI AS MEVCUT_AD,
LEAD(IL_KODU, 1, ‘-’) OVER (ORDER BY a.IL_KODU ASC) AS SONRAKI_KOD,
LEAD(IL_ADI, 1, ‘-’) OVER (ORDER BY a.IL_KODU ASC) AS SONRAKI_AD
FROM IL a;
Ekran Çıktısı :

İyi Çalışmalar…


İkinci el oto pazarının klasik yalanları bitecek !!!

Yazan: Mevlüt Becerikli Tarih: Ağu 12th, 2009 | Kategori:: Diğer






Çalışanı olduÄŸum Sigorta Bilgi Merkezi’ nden bir ilk daha…

Sorgulama Tipi
Kullanılacak Bilgi
Örnek SMS Mesajı İpucu Bilgi
Servis Ücretleri
Hasar Geçmişi SMS Sorgulama
Plaka No
HASAR 34XX1234
HASAR yerine HS yazılabilir
7 SMS / 14 kontör
Kaza Tespit Tutanagi SMS Sorgulama
Plaka No
KAZA 34XX1234
KAZA yerine KTT veya KZ yazılabilir
5 SMS / 10 kontör
Trafik Poliçesi SMS Sorgulama
Plaka No
TRAFIK 34XX1234
TRAFIK yerine TR yazılabilir
5 SMS / 10 kontör
Kasko Poliçesi SMS Sorgulama
Plaka No
KASKO 34XX1234
KASKO yerine KS yazılabilir
5 SMS / 10 kontör
Magdur SMS Sorgulama
TC Kimlik No
MAGDUR 32740XXXX86
MAGDUR yerine MAG yazılabilir
4 SMS / 8 kontör

Not : SMS gönderirken;

  • BÜYÜK - küçük harf ayrimı yoktur.
  • Plaka bitisik veya ayri yazılabilir.
  • Plaka il kodu iki hane olmalidir.

Basında :


VMware, SpringSource’ u satın almak üzere ????

Yazan: Mevlüt Becerikli Tarih: Ağu 11th, 2009 | Kategori:: IT, Teknoloji

Bu da olur mu acaba ???
Bu sorunun cevabını bilemem ama Spring in resmi sitesinde çıkan haberde olay ciddi gözüküyor.
İlgilenenler için haberin linki :

http://www.springsource.com/newsevents/vmware-acquire-springsource

Tüm Spring-severlerin bilgisine…
:-)