这不是真正的深入或彻底,但我认为如果您使用MS SQL Server或Oracle(也许Nigel可以帮助PL-SQL示例)...... Nigel正在做些什么。这只有3个依赖关系,但可以修改为你需要的深度。这不是最漂亮的东西......但它的功能......
select so.name + case when so.xtype='P' then ' (Stored Proc)' when so.xtype='U' then ' (Table)' when so.xtype='V' then ' (View)' else ' (Unknown)' end as EntityName, so2.name + case when so2.xtype='P' then ' (Stored Proc)' when so2.xtype='U' then ' (Table)' when so2.xtype='V' then ' (View)' else ' (Unknown)' end as FirstDependancy, so3.name + case when so3.xtype='P' then ' (Stored Proc)' when so3.xtype='U' then ' (Table)' when so3.xtype='V' then ' (View)' else ' (Unknown)' end as SecondDependancy, so4.name + case when so4.xtype='P' then ' (Stored Proc)' when so4.xtype='U' then ' (Table)' when so4.xtype='V' then ' (View)' else ' (Unknown)' end as ThirdDependancy from sysdepends sd inner join sysobjects as so on sd.id=so.id left join sysobjects as so2 on sd.depid=so2.id left join sysdepends as sd2 on so2.id=sd2.id and so2.xtype not in ('S','PK','D') left join sysobjects as so3 on sd2.depid=so3.id and so3.xtype not in ('S','PK','D') left join sysdepends as sd3 on so3.id=sd3.id and so3.xtype not in ('S','PK','D') left join sysobjects as so4 on sd3.depid=so4.id and so4.xtype not in ('S','PK','D') where so.xtype = 'P' and left(so.name,2)<>'dt' group by so.name, so2.name, so3.name, so4.name, so.xtype, so2.xtype, so3.xtype, so4.xtype
Redgate有一个相当昂贵的产品叫做 SQL依赖关系跟踪器 这似乎符合要求。
如何查找数据库对象的依赖关系链 (MS SQL Server 2000(?)+) 雅各布塞巴斯蒂安
每次他需要部署新报告或修改现有报告 报告,他需要知道依赖的数据库对象是什么 给定的报告存储过程。有时候报道很多 复杂的,每个存储过程可能有几十个依赖 对象和每个依赖对象可能依赖于其他几十个 对象。 他需要一种方法来递归地找到a的所有依赖对象 给定存储过程。我用CTE编写了一个递归查询来实现 这个。
每次他需要部署新报告或修改现有报告 报告,他需要知道依赖的数据库对象是什么 给定的报告存储过程。有时候报道很多 复杂的,每个存储过程可能有几十个依赖 对象和每个依赖对象可能依赖于其他几十个 对象。
他需要一种方法来递归地找到a的所有依赖对象 给定存储过程。我用CTE编写了一个递归查询来实现 这个。
我觉得 rpetrich提到的Red Gate Dependency Tracker 是一个不错的解决方案,它运作良好,红门有30天的试用期(理想情况下,你可以进行取证)。
我还会考虑隔离系统并运行 的 SQL事件探查器,它将显示表上的所有SQL操作 强> 。这通常是一个 的 构建序列图的良好起点,或者您选择记录这些代码 强> 。祝好运!
逆向工程的唯一最佳工具是APEX。太奇妙了。它甚至可以跟踪.NET程序集并告诉您使用proc的位置。它是迄今为止最深的产品。 RedGate有很多其他工具,但在这种情况下不是。
存储过程是什么数据库? Oracle,SQL Server还有别的吗?
的 根据评论进行编辑: 强> 鉴于您正在使用Oracle,请查看 蟾蜍 。我在其中使用了一个名为Code Roadmap的功能,它允许您以图形方式显示数据库中的PL / SQL相互依赖性。它可以在仅代码模式下运行,显示运行时调用堆栈依赖性,或者在Code Plus数据模式下运行,它还显示代码触及的数据库对象(表,视图,触发器)。
(注意 - 我是TOAD用户,并且从中获取没有任何好处)