日期:2014-05-16  浏览次数:20444 次

oracle关于start with和decode语句使用

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