看来应该很容易找出来,但我一直在努力寻找任何答案。
我希望能够对Oracle中的USER_VIEWS表进行查询,以查找使用特定表的其他视图。
就像是:
SELECT view_name,来自user_views的文本,其中文本类似’%MY_TABLE%’
我收到错误消息:ORA-00932:数据类型不一致:预期的NUMBER个很长
TEXT的数据类型为LONG,在TOAD中显示为WIDEMEMO。
我尝试过将其转换为to_char并进行串联。我尝试仅使用TEXT数据创建另一个表,但得到ORA-00997:LONG数据类型的非法使用。
有任何想法吗?
谢谢!
从技术上讲,您可以使用该DBMS_METADATA程序包在CLOB中获取视图的DDL,然后解析该表以查找对表的引用。但是,比查看视图定义要容易得多的解决方案。
DBMS_METADATA
甲骨文保持在大约对象相关信息的USER_DEPENDENCIES视图(或ALL_DEPENDENCIES或DBA_DEPENDENCIES根据您的权限级别,以及是否你想跟踪所有模式的依赖)。您最好使用这些视图
USER_DEPENDENCIES
ALL_DEPENDENCIES
DBA_DEPENDENCIES
SQL> create table base_table ( 2 col1 number 3 ); Table created. SQL> create view my_view 2 as 3 select * 4 from base_table; View created. SQL> select name, type 2 from user_dependencies 3 where referenced_name = 'BASE_TABLE'; NAME TYPE ------------------------------ ------------------ MY_VIEW VIEW
如果您使用的是USER_DEPENDENCIES视图,则还可以使用从属对象树来做更复杂的事情。如果我创建一个依赖于第一个视图的第二个视图,则可以很容易地看到两个视图最终都使用了基表。
SQL> create view my_view2 2 as 3 select * 4 from my_view; View created. SQL> ed Wrote file afiedt.buf 1 select level, name, type 2 from user_dependencies 3 start with referenced_name = 'BASE_TABLE' 4* connect by referenced_name = prior name SQL> / LEVEL NAME TYPE ---------- ------------------------------ ------------------ 1 MY_VIEW VIEW 2 MY_VIEW2 VIEW