我是PL SQL的新手,我试图在其上创建一个递归函数,但我对PL SQL术语感到困惑。
我的表格结构如下:
FFAM_ACC_ID FFAM_UPPER_ACC_ID FFAM_GROUP_FLAG
1 0 1
2 1 1
3 1 2
4 2 1
5 4 2
6 1 2
7 6 2
8 0 1
9 8 2
现在,我想创建一个递归函数。所以,如果我提供FFAM_ACC_ID
,它应该能够返回给我FFAM_GROUP_FLAG
2的孩子ID。
FFAM_UPPER_ACC_ID
是父ID,FFAM_GROUP_FLAG
确定该行是否为某个组。
所以,如果我提供2,它应该什么也不返回,因为虽然它有一个子行,但是那行有FFAM_GROUP_FLAG
1。它是小组。
如果我提供1,则应返回3,6,7。这需要递归,因为父ID为3且父ID为7。
如果我提供9,它应该返回9. 虽然它没有子行,但它不是一个组。
答案 0 :(得分:4)
您实际上并不需要递归程序,甚至根本不需要程序:改为使用hierarchical queries。
这应该做你想要的(至少按照你提供的输入工作):
select * from FMS_FC_ACC_MST
where ffam_group_flag = 2
start with ffam_acc_id = <your input>
connect by ffam_group_flag = 2
and prior ffam_acc_id = ffam_upper_acc_id;
答案 1 :(得分:1)
with
input as (
select 9 as FFAM_ACC_ID from dual -- change to 1, 2
)
select FFAM_ACC_ID
from FMS_FC_ACC_MST
start with
FFAM_UPPER_ACC_ID = (select FFAM_ACC_ID from input)
and FFAM_GROUP_FLAG = 2
connect by
prior FFAM_ACC_ID = FFAM_UPPER_ACC_ID
union all
select FFAM_ACC_ID
from FMS_FC_ACC_MST
natural join input
where FFAM_GROUP_FLAG = 2