Oracle:搜索所有存储的proc / triggers /其他db代码?

时间:2011-04-20 19:15:51

标签: oracle stored-procedures triggers replace

是否可以在Oracle中的多个模式中搜索所有程序对象(函数,存储过程,触发器等)?

我的代码中有许多表似乎未使用,但我不希望先删除它们而不先检查它们。

4 个答案:

答案 0 :(得分:10)

可以搜索目标代码 - 您通常使用DBMS_METADATA包为对象生成DDL,然后搜索CLOB。然而,这听起来并不像你想要做的那样。

如果您只想弄清楚系统中的任何代码是否引用了某个表,您通常会希望使用DBA_DEPENDENCIES视图(或ALL_DEPENDENCIESUSER_DEPENDENCIES取决于关于你的特权和你正在寻找的范围)。像

这样的东西
SELECT *
  FROM dba_dependencies
 WHERE referenced_owner = 'SCOTT'
   AND referenced_name  = 'EMP'
   AND referenced_type  = 'TABLE'

将显示取决于EMP架构中SCOTT表的所有内容。

您希望搜索代码而不是查看DBA_DEPENDENCIES的唯一时间就是您使用动态SQL的代码,其中表名是硬编码的。但这在实践中相对不太可能。

答案 1 :(得分:2)

您可以搜索DBA_SOURCE视图:

SELECT *
  FROM dba_source
 WHERE UPPER(text) LIKE '%YOUR_TABLE_NAME%';

答案 2 :(得分:1)

选择以下内容在Toad中执行此操作:

搜索=>对象搜索

答案 3 :(得分:0)

如果您有Toad,则可以内置此功能。 (我删除了我的隐私模式) Toad Search