Örnek
ust_mal_id tablodaki başka bir kayıdı (id’yi) göstersin (seviye mal tablosu üzerindeki bir alandır. En üst seviye=1 dir ve seviye=1 olan kayıtların ust_mal_id değeri bostur).
SELECT seviye,id, ust_mal_id
FROM mal
CONNECT BY PRIOR ust_mal_id=id
START WITH ID = 25909
ORDER BY SEVIYE DESC
ÇIKTI
SEVIYE ID UST_MAL_ID
3 25909 24916
2 24916 25051
1 25051
Bir Function Yazarak Bu Sorguyu Program içinden kullanabiliriz
/* Formatted on 26.09.2011 15:59:27 (QP5 v5.149.1003.31008) */
CREATE OR REPLACE FUNCTION "MAL_USTMALIDLERI_BIRLESTIR" (P_MAL_ID IN NUMBER)
RETURN VARCHAR2
IS
CURSOR C1
IS
SELECT seviye, id, ust_mal_id
FROM mal
CONNECT BY PRIOR ust_mal_id = id
START WITH ID = P_MAL_ID
ORDER BY SEVIYE DESC;
V_MAL_IDLER VARCHAR2 (100);
BEGIN
V_MAL_IDLER := '';
FOR C1REC IN C1
LOOP
V_MAL_IDLER := V_MAL_IDLER || C1REC.ID || ';';
END LOOP;
RETURN V_MAL_IDLER;
END MAL_USTMALIDLERI_BIRLESTIR;
Grant
DBMS_UTILITY.EXEC_DDL_STATEMENT('grant execute on MAL_USTMALIDLERI_BIRLESTIR to vtuser');
Grant
DBMS_UTILITY.EXEC_DDL_STATEMENT('grant execute on MAL_USTMALIDLERI_BIRLESTIR to vtuser');
Kullanım
SELECT MAL_USTMALIDLERI_BIRLESTIR(25909) FROM DUAL;
ÇIKTI
25909;24916;25051;
Hiç yorum yok:
Yorum Gönder