如何在where子句中包含USER_VIEWS.TEXT列

这似乎应该是一件容易的事情,但我很难找到任何答案。 我希望能够在Oracle中查询USER_VIEWS表以查找使用特定表的其他视图。 就像是:   SELECT view_name,text FROM user_views   文本类似'%MY_TABLE%' 我收到错误: ORA-00932:不一致的数据类型:预期NUMBER变长 TEXT的数据类型为LONG,在TOAD中显示WIDEMEMO。 我已经尝试过它,to_char和连接。我尝试用TEXT数据创建另一个表,然后得到ORA-00997:非法使用LONG数据类型。 有任何想法吗? 谢谢!     
已邀请:
从技术上讲,您可以使用
DBMS_METADATA
包来获取CLOB中视图的DDL,然后解析查找表的引用。但是,与查看视图定义相比,有更简单的解决方案。 Oracle在
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
    
您不能将LKE列与LIKE一起使用。您可以编写自己的自定义函数来执行搜索 - 请参阅http://www.techonthenet.com/oracle/questions/long_value.php 您还可以创建一个表并将LONG列转换为CLOB列:
create table my_tab as
select to_lob(text) from user_views;
另见http://www.dba-oracle.com/oracle_news/2005_5_9_converting_long_lob_data_types.htm     
如果您只想在TOAD的数据网格中看到它,那么您可以打开预览: View => Toad Options => Data Grids => Data => [x]预览CLOB和LONG数据 我正在使用TOAD 10.5.1.3     

要回复问题请先登录注册