Merhabalar , Bu yazımda Oracle PL/SQL de Hiyerarşik yapılar için kolaylık sağlayan CONNECT BY ifadesini örnekle açıklamaya çalışacağım

Hiyerarşik yapı , Ağaç yapısı (tree) şeklinde olan  Örneğin , Web sayfalarındaki Menüler gibi  Ana Menü altında birçok menü her birinin altında farklı menüler veya Şirket içi hiyerarşi çalışan –> çalışanın yöneticisi v.s. , Bu işlem için birden fazla yapı kullanabiliriz , LOOP ile Recursive fonksiyonlar ile mesela , fakat PL/SQL de işimizi çok kolaylaştıran CONNECT BY ifadesi mevcut.

CONNECT BY ifadesi ile yapacağımız örnekte en alt hiyerarşideki veriyi verip en üste kadar olan listeyi alacağız:

Örneğimizde Kullanacağımız Menü Hiyerarşisi :

screenshot_2

Sorgumuzda kullanacağımız ifadelerin kısaca açıklayayım :

CONNECT BY : Hiyerarşi bağlantısını belirtir , yani parent-child , üst – ast ilişkisi ni belirten sütunlar ı ilişkilendirir.

START WITH : Sorgulayacağımız hiyerarşinin hangi kısımdan , kökten başlayacağını belirtmek için.

PRIOR : Hiyerarşinin ilerleyeceği yönü belirtmek için kullanılır.

Örneğimizde kullanmak için bir tablo örneği scripti :

--


CREATE TABLE MENU(NAME VARCHAR2(50) , ID VARCHAR2(50),PARENT VARCHAR2(50))

INSERT INTO MENU VALUES ('AnaMenu',1,0);
INSERT INTO MENU VALUES ('BirinciDereceAltMenu1',2,1);
INSERT INTO MENU VALUES ('BirinciDereceAltMenu2',3,1);
INSERT INTO MENU VALUES ('BirinciDereceAltMenu3',4,1);
INSERT INTO MENU VALUES ('IkinciDereceAltMenu4',5,2);
INSERT INTO MENU VALUES ('IkinciDereceAltMenu5',6,2);
INSERT INTO MENU VALUES ('IkinciDereceAltMenu6',7,2);
INSERT INTO MENU VALUES ('IkinciDereceAltMenu7',8,3);
INSERT INTO MENU VALUES ('IkinciDereceAltMenu8',9,3);
INSERT INTO MENU VALUES ('UcuncuDereceAltMenu9',10,5);
INSERT INTO MENU VALUES ('UcuncuDereceAltMenu10',11,6);


--

Oluşan Tablomuzda Id si 11 olan menüden Ana menüye olan hiyerarşi listesini sorgulayacağız :

screenshot_3

--

SELECT NAME ,ID,PARENT
FROM MENU
CONNECT BY  ID = PRIOR PARENT
START WITH ID = 11;

--

Sonuç :

screenshot_4

Kısaca ilk başta anlatığım ifadeleri örnek sorgu üzerinde açıklayayım :

CONNECT BY  ID = PRIOR PARENT ile ID ve PARENT sütunlarının ilişkili olduğunu belirttik , PRIOR ifadesi PARENT tarafında yazdığımız için sorgumuzun yönü ID den PARENT Tarafına doğru ilerledi , START WITH ID = 11; ile de ID si 11 olan kayıttan başlayarak son kayda kadar ilerlemesini sağladı.

Kaynak ve daha detaylı bilgi ve farklı kullanımları incelemek için : https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm

İyi Çalışmalar…

Print Friendly, PDF & Email
Bu alana reklam verebilirsiniz!