是否可以在Oracle中的多个模式中搜索所有程序对象(函数,存储过程,触发器等)?
我的代码中有许多表似乎未使用,但我不希望先删除它们而不先检查它们。
答案 0 :(得分:10)
可以搜索目标代码 - 您通常使用DBMS_METADATA包为对象生成DDL,然后搜索CLOB。然而,这听起来并不像你想要做的那样。
如果您只想弄清楚系统中的任何代码是否引用了某个表,您通常会希望使用DBA_DEPENDENCIES
视图(或ALL_DEPENDENCIES
或USER_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,则可以内置此功能。 (我删除了我的隐私模式)