【问题标题】:I want to find the list of procedures and packages which uses a specific table or view?我想查找使用特定表或视图的过程和包的列表?
【发布时间】:2014-09-10 01:40:08
【问题描述】:

我有一个特定的 oracle 数据库。我有大约 600 个程序和 26 个包。我有一个视图名称,考虑 view_1,它最近被另一个视图替换为 view_2。我想在使用它的所有包和过程中将视图名称从 View_1 更改为 View_2。你能给我一个解决方案吗?我怎么知道使用这个 view_1 的过程和包的列表。

提前致谢,

【问题讨论】:

  • 也许您可以使用这个技巧:stackoverflow.com/questions/1819447/…,然后将您的注意力限制在包含 view_1 的那些上。最后你可能会有一些程序需要经过和调整,除非有大量的编辑,否则手动完成应该是可行的
  • 嗨@Brandin,stackoverflow.com/questions/1819447/… 与这种情况不同。我想要使​​用 view_1 的单个模式中的过程、包和函数的列表。这样我就可以用 View_2 替换 View_1 名称
  • 如果您有所有过程的列表,则将您的范围限制在包含 View_1 或其他内容的范围内。它可能会远远少于 600
  • @brandin 我是甲骨文的新手。您能否建议可能的查询以检索信息。提前感谢
  • 是的,我提供的链接中有一个示例。只需先尝试一下,然后如果太多,请尝试仅使用包含 View_1 或其他内容的过程来限制它

标签: oracle10g


【解决方案1】:

您可以使用dba_dependencies(或all_dependenciesuser_dependencies,具体取决于您的权限以及您是否以拥有所有对象的架构的用户身份登录。

这将向您显示数据库中依赖于view_1 的每个对象的所有者、对象名称和对象类型。

SELECT owner, name, type
  FROM dba_dependencies
 WHERE referenced_owner = <<owner of view_1>>
   AND referenced_name  = 'VIEW_1'
   AND referenced_type  = 'VIEW'

如果您只关心您拥有特权的对象,您可以用all_dependencies 数据字典表替换dba_dependencies。如果您只关心架构中的对象,则可以使用 user_dependences,但您会从投影中省略 owner 列。

请注意,这只会解决 Oracle 知道存在依赖关系的情况。如果您有使用动态 SQL 来引用 view_1 的代码,那么 Oracle 不知道这一点,因此您无法通过查询数据字典找到它。您可能需要手动检查正在执行此操作的任何代码。

但是,如果您要用另一种视图替换一个视图,我会质疑您为什么不直接将 view_1 的实现替换为 view_2 的实现。当您可以更改 view_1 的实现时,为什么还要费心去修改代码中引用 view_1 的每个地方?毕竟,将视图层作为 API 的好处之一是,当底层数据模型发生变化时,您可以更改视图的实现,而无需触及依赖于视图的所有代码。

【讨论】:

  • 感谢贾斯汀的回复。视图的实现无法更改,因为我们不是视图的所有者,并且我们从其他模式派生视图。最初我们的系统是这样设置的,即 View_1 出现故障,我们的系统也出现故障。现在我们在 itr 模式中给出了一个独立的视图来避免这种依赖。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多