我需要找到对表字段的所有引用,并且我有数百个存储过程要搜索。目标是在where子句中找到它的使用位置,并在in语句中添加一个额外的值。例如,
where myTable.Field_X in (1,2,3)
需要成为
myTable.Field_X in (1,2,3,4)
。
所以我很好奇是否有一个系统表,比如dba_dependencies,或者我可以查询的东西,它会告诉我哪些procs,views或函数引用了这个字段?感谢您提供任何帮助。
答案 0 :(得分:1)
您使用的是哪个版本的Oracle?如果您使用的是至少11.1,它引入了列级依赖关系跟踪,并且您并不害怕利用某些未记录的数据字典表,则可以create a dba_dependency_columns
view向您提供此信息。但是,这将显示依赖于该列的每段代码,而不仅仅是在语句的WHERE
子句中使用该列的那些代码。
您可以在dba_source
中搜索过程,函数和触发器的文本,以查找具有该类WHERE
子句的代码。但是这有点棘手 - 如果有人将值列表放在不同的行上,或者如果有一个内联视图,其中列名称别名为别名,则通过文本搜索找到它可能很棘手。对于视图,您需要使用dbms_metadata
为视图生成DDL并在循环中搜索它。