Merhaba Arkadaşlar Oracle da hiyerarşik sonuçlar dönderen sorguların nasıl yapıldığını dilim döndüğünce anlatmaya çalışacam.
hiç bir ilişkisel veri tabanı verileri hiyerarşik olarak kaydetmez. Ama oracle bize veritabanındaki kayıtlar üzerinde hiyerarşi sağlamamızı sağlayacak bi özellik vermiştir. Bir yada birden fazla tablolarınızda bulunan ilişkiselliği kullanarak bunları hiyerarşik şekilde ekran a getirebilirz.
Mesela Organizasyon Ağaç Şeması oluşturabilir, Soy ağacı oluşturabilir, Ürün ağacı , işletme operasyon şeması gibi hiyerarşi gerektiren şemaları bir sorgu ile oluşturabilirsiniz.
İlk önce örnek sorgu için tablomuzu oluşturalım
CREATE TABLE ORGANIZASYON
(
SICIL NUMBER,
ADI VARCHAR2(30),
SOYADI VARCHAR2(30),
GOREVI VARCHAR2(50),
AMIRI NUMBER
);
ve bu tablomuza örnek verimizi girelim.
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI) Values (121, 'Ahmet', 'Guven', 'Yonetim Kurulu Başkanı');
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (199, 'Mehmet', 'Koru', 'Genel Müdür', 121);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (210, 'Kemal', 'Kılıç', 'Pazarlama Müdürü', 199);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (219, 'Polat', 'Alemdar', 'Satınalma Müdürü', 199);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (276, 'Mehmet', 'Karaman', 'Finans Müdürü', 199);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (286, 'Orhan', 'Ünlü', 'İnsan Kaynakları Müdürü', 199);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (291, 'Osman', 'Deniz', 'Üretim Müdürü', 199);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (420, 'Alper', 'Turan', 'Üretim Şefi', 291);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (428, 'Hakan', 'Burçak', 'Kalite Kontrol Şefi', 291);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (440, 'Seda', 'Öztürk', 'Satınalma Şefi', 219);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (444, 'Melike', 'Yılmaz', 'Muhasebe Şefi', 276);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (459, 'Halil', 'Ertuğrul', 'Kalite Kontol Mühendisi', 420);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (478, 'Sevda', 'Demir', 'Personel Memuru', 286);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (477, 'Nilgün', 'İşlek', 'Satış Sorumlusu', 210);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (498, 'Beyza', 'Güven', 'Müşteri Temsilcisi', 210);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (670, 'Fatma', 'Kaya', 'Müşteri Temsilcisi', 210);
Insert into ORGANIZASYON (SICIL, ADI, SOYADI, GOREVI, AMIRI) Values (981, 'Fikret', 'Mavi', 'Laborant', 428);
COMMIT;
select * from organizasyon
dediğimizde bize resimdeki gibi veriler dönecek.
Bu basit bir organizasyon şemasıdır. Her kişinin Sicil Numarası vardır amir kısmında ise bağlı olduğu amirin sicil numarası vardır.
Şimdi sıra bu tabloyu hiyerarşik olarak sıralatmaya geldi
bunun için kullanacağımız komutlar
START WITH : Hiyerarşik yapının başlayacağı ifadeyi gösterir.
CONNECT BY PRIOR : Bu ifade ise master / detail ilişki kurulacak kolonları belirtir.
LEVEL : Dönen sonuçta hiyerarşik seviye yi gösterir.
örnek sql kodu ve sonucuna bakalım.
select sicil, adi, soyadi, gorevi, amiri, LEVEL from organizasyon
START WITH amiri IS NULL
CONNECT BY PRIOR sicil = amiri
Gördüğünüz gibi artık sorgumuzda level (seviye) kolonu oluştu.
şimdi görsellik oluşturup sorgu sonucunu ağaç şeklinde gösterelim.
select LPAD(adi||'-'||soyadi, Length(adi||'-'||soyadi)+ LEVEL * 10 -10, '-') OrganizasyonSemasi
from organizasyon
START WITH amiri IS NULL
CONNECT BY PRIOR sicil = amiri
veya
select LPAD(gorevi, Length(gorevi)+ LEVEL * 10 -10, '-') OrganizasyonSemasi
from organizasyon
START WITH amiri IS NULL
CONNECT BY PRIOR sicil = amiri
Dilim döndüğünce anlatmaya çalıştım. Anlatığım bozukluğu için kusura bakmayın.
Konuyla ilgili görüş ve sorularınızı yazarsanız sevinirim.