nor*_*ole 2 sql oracle oracle10g ora-00932 ora-00997
这似乎应该是一件容易的事情,但我很难找到任何答案.
我希望能够在Oracle中查询USER_VIEWS表以查找使用特定表的其他视图.
就像是:
SELECT view_name,text FROM user_views WHERE text LIKE'%MY_TABLE%'
我收到错误:ORA-00932:不一致的数据类型:预期NUMBER变长
TEXT的数据类型为LONG,在TOAD中显示WIDEMEMO.
我已经尝试过它,to_char和连接.我尝试用TEXT数据创建另一个表,然后得到ORA-00997:非法使用LONG数据类型.
有任何想法吗?
谢谢!
从技术上讲,您可以使用该DBMS_METADATA
包来获取CLOB中视图的DDL,然后解析该查找表的引用.但是,与查看视图定义相比,有更简单的解决方案.
甲骨文维护有关对象相关信息的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
Run Code Online (Sandbox Code Playgroud)
如果您正在使用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
Run Code Online (Sandbox Code Playgroud)