Oracle:搜索所有存储的过程/触发器/其他数据库代码?

标签 oracle stored-procedures triggers replace

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

我的代码中有许多表似乎未使用,但我不想通过删除它们而不先检查来破坏任何内容。

最佳答案

可以搜索对象代码——您通常会使用 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 的代码时,其中表名是硬编码的。但这在实践中相对不太可能。

关于Oracle:搜索所有存储的过程/触发器/其他数据库代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5735463/

相关文章:

sql - select 语句中的动态表名

mysql - 如何将输入的参数值与存储过程mysql中的变量进行比较?

oracle - 使用 Oracle 触发器检索用户名

c++ - 哪种机制使 Oracle session 在服务器上保持事件状态?

sql - Oracle 左外连接语法速记符号 (+) 在 HQL 中可用吗?

javascript - 雪花: How to insert into a table from a flattened array of date strings variable?

sql - 外键约束的条件级联操作?

mysql - sql 触发器 - if 语句 - 防止更新

sql - 如何按键生成日期范围的行

mysql - DBI begin_work 不适用于存储过程调用