【问题标题】:Recursive query using CTE使用 CTE 的递归查询
【发布时间】:2014-08-11 06:37:09
【问题描述】:

所以我在 oracle 中使用 dba_dependencies 来生成依赖关系表。我想使用 CTE 递归地遍历依赖项。

 with recurs (name, owner, type, rname, rowner, rtype,  lvl ) as (
   select name, owner, type, referenced_name, referenced_owner, referenced_type,  1
   from dba_dependencies
   where referenced_name =:object_name

  union all

   select a.name,a.owner, a.type, a.referenced_name,a.referenced_owner, a.referenced_type, r.lvl + 1
   from dba_dependencies a inner join recurs  r
   on r.name = a.referenced_name
    and r.owner = a.referenced_owner
    and r.type = a.referenced_type 
 ) 

 select * 
 from recurs; 

但是似乎有一个问题,它返回一个很短的列表,与依赖的数量不匹配。任何人都知道问题可能是什么?谢谢!

【问题讨论】:

  • 如果返回的数据有问题,则需要提供输入数据、当前输出数据和预期输出数据。创建一个演示您的问题的最小数据集。
  • referenced_name, referenced_name ?也许referenced_name, referenced_owner
  • @HamletHakobyan 感谢您指出这个错误!但不幸的是这不是问题
  • 我想我对这段代码 sn-p 的作用有一个相当好的想法,但你没有解释它应该做什么,所以我可以'不判断问题是否是例如在逻辑实现或其他地方。到目前为止,这似乎只是一场猜谜游戏,因为我没有运行代码的示例,也没有预期的输出来比较结果。

标签: sql oracle recursion


【解决方案1】:

可能你需要使用CONNECT BY

SELECT *
FROM dba_dependencies
START WITH referenced_name =:object_name
CONNECT BY PRIOR name = referenced_name
and owner = referenced_owner
and type = referenced_type 

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2016-09-28
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多