【发布时间】: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 的作用有一个相当好的想法,但你没有解释它应该做什么,所以我可以'不判断问题是否是例如在逻辑实现或其他地方。到目前为止,这似乎只是一场猜谜游戏,因为我没有运行代码的示例,也没有预期的输出来比较结果。