ORACLE PL-SQL CONNECT BY PRIOR ile Hiyerarşik sorgular
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 :
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 :
-- SELECT NAME ,ID,PARENT FROM MENU CONNECT BY ID = PRIOR PARENT START WITH ID = 11; --
Sonuç :
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…