如何查找存储过程中使用的列

时间:2017-08-28 17:32:23

标签: oracle plsql

是否可以使用PL / SQL获取特定过程中已使用列的列表?我必须检查Oracle DB中的500多个程序并打印出其中使用的所有列。

1 个答案:

答案 0 :(得分:1)

令人惊讶的是,Oracle确实可以使PL / SQL中计算出的 table 依赖项可供查看:

select * from user_dependencies -- can also use all_ or dba_dependencies
where type = 'PROCEDURE' and REFERENCED_TYPE = 'TABLE';

但是如果你真的需要列级依赖,我认为这将更加困难。这是一个非常简单的答案,它将说明问题的一些问题。

select name, type, line, text, table_name, column_name 
from user_source
join user_tab_cols
  on text like '%'|| column_name || '%';

因此,您可以在所有过程中搜索与现有列名匹配的任何字符串。我能想到这种方法的几十个问题;上面的评论者提到了其中的一些,比如你想看的调用堆栈有多深。或者,根据列的命名方式,不明确的名称(SID,MODIFIED_DATE等)将产生重复的条目。并且无法区分对列名称的实际引用和碰巧具有相同拼写的局部变量。或者评论。而观点或同义词可能会搞砸你的搜索。这似乎是一个非常棘手的问题。我希望 user_dependencies 中的表格足以满足您的需求。