CMS 系統需根據用戶 subject_id 動態生成欄位導航樹,需求:
action_1 = '1')action_1 = '0')V_NP_CTREE_BSCONNECT BY 從授權根節點展開LAG() 分析函數標記根節點(RK IS NULL)NOT EXISTS 反向排除拒絕授權的子樹UNION ALL 補充頂層根節點(parent_id = 0)V_NP_CTREE_PAFATHERCASE WHEN column_id=1 THEN 0 ELSE NVL(FATHER, 1) END 定義虛擬父節點 VFAV_NP_CTREE_RSVFA、disorder、column_id 排序確保層級順序SYS_CONNECT_BY_PATH 生成完整路徑(如 /根/子/孫)LPAD(' ', 2*LEVEL-1) 產生視覺縮排-- 授權根節點查詢
START WITH t.column_id IN (
SELECT t.column_id FROM np_cms_column_security t
WHERE t.subject_id = 'mazj' AND t.action_1 = '1'
)
-- 拒絕授權子樹排除
AND NOT EXISTS (
SELECT 0 FROM ... START WITH d.column_id IN (
SELECT t.column_id FROM np_cms_column_security t
WHERE t.subject_id = 'mazj' AND t.action_1 = '0'
AND EXISTS ( ...授權樹內部節點... )
)
)
-- 路徑生成
LPAD(' ', 2 * LEVEL - 1) || SYS_CONNECT_BY_PATH(D.COLUMN_NAME, '/') "Path"