这似乎应该是一件很容易弄清楚的事情,但我正在努力寻找任何答案。
我希望能够查询 Oracle 中的 USER_VIEWS 表以查找使用特定表的其他视图。
就像是:
从用户视图中选择视图名称、文本
WHERE 文本 LIKE'%MY_TABLE%'
我收到错误:
ORA-00932: 数据类型不一致: 预期的 NUMBER 变为 LONG
TEXT 的数据类型为 LONG,在 TOAD 中显示为 WIDEMEMO。
我尝试过将其转换为 to_char 并连接。我尝试创建另一个仅包含 TEXT 数据的表,结果出现 ORA-00997:非法使用 LONG 数据类型。
有任何想法吗?
Thanks!
从技术上讲,您可以使用DBMS_METADATA
包以获取 CLOB 中视图的 DDL,然后解析它以查找对表的引用。但还有比查看视图定义更简单的解决方案。
Oracle 在以下位置维护有关对象依赖关系的信息:USER_DEPENDENCIES
查看(或ALL_DEPENDENCIES
or 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)