查询或方法,以根据表的特定列查找包

时间:2014-03-19 03:42:42

标签: oracle oracle11g

我必须更改表的列的名称和数据类型。我在Oracle 11g数据库中有大约200个++包。如何找到依赖于此列的所有包的名称?

1 个答案:

答案 0 :(得分:2)

您必须查看all_dependencies视图以检查所有对象正在使用您的表格。

select * from all_dependencies 
where referenced_name = '<table_name_in_upper_case>';

但这并没有告诉你使用了哪些列。

您必须为此考虑all_source

select distinct type, name 
from all_source 
where upper(text) like '<column_name_in_upper_case>'
and name in (
            select name 
            from all_dependencies 
            where referenced_name = '<table_name_in_upper_case>'
            );

但是,如果列名是通用的,这可能会给你误报。

此外,all_source不会显示可能正在使用此列名称的任何视图。您必须查看all_views或使用

select dbms_metadata.get_ddl('VIEW','view_name_in_upper_case','owner_in_upper_case')
FROM dual