日期:2014-05-16 浏览次数:20444 次
start with ... connect by prior
该语句实现递归查询
select ... from <Table_Name>
where <Conditional-1>
start with <Conditional-2>
connect by prior <Conditional-3>
?
<Conditional-1>过滤参数,对查询返回结果的过滤
<Conditional-2>对根结点的限制语句,因为返回的结果可理解成一颗树
<Conditional-3>连接语句,prior是指上一条记录,如 connect by prior id = root_id 是指把上条记录的id作为本条记录的
root_id
?
扫描树结果表是,需要扫描每颗树的每个结点,一个节点只能访问一次,其访问步骤如下:
第一步:从根节点开始。
第二步:访问该节点。
第三步:判断该节点有无被访问的子节点,若有,则转向它最左侧的未被访问的子节点,并执行第二步,否则执行第四步。
第四步:若该节点为根节点,则访问完毕,执行第五步。
第五步:返回该节点的父节点,并访问第三步。
?
decode(<Conditional-1>,<value-1>,<result_value-1>,<value-2>,<result_value-2>,<value-3>,<result_value-3>
...default_result_value)
含义解释:decode(条件,值-1,返回值-1,值-2,返回值-2,值-3,返回值-3,默认返回值) row_name
该函数的含义也可如此表示:
if 条件==值-1 then
? ?return 返回值-1
elseif 条件==值-2 then
? ?return 返回值-2
elseif 条件==值-3 then
? ?return 返回值-3
else
? ?return 默认值
end if