当前位置: 首页 > 面试题库 >

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

柴衡
2023-03-14
问题内容

看来应该很容易找出来,但我一直在努力寻找任何答案。

我希望能够对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,然后解析该表以查找对表的引用。但是,比查看视图定义要容易得多的解决方案。

甲骨文保持在大约对象相关信息的USER_DEPENDENCIES视图(或ALL_DEPENDENCIESDBA_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


 类似资料:
  • 问题内容: 当表开始增长时,我担心WHERE子句中IN的性能。有没有人对这种查询有更好的策略?子查询返回的记录数比TradeLine表中的记录数增长得慢得多。TradeLine表本身以每天10个的速度增长。 谢谢你。 编辑:我使用了将子查询从WHERE移到FROM的想法。我对有助于此新查询的所有答案投了赞成票。 问题答案: 子句中的子查询不依赖于外部查询中的任何内容。您可以安全地将其移到子句中;一

  • 问题内容: 我正在尝试作为请求执行查询,以便从我创建的索引中提取数据。索引中的数据是DB 的表,但是通过进行配置。 这是我的不带IN子句的请求: http:// localhost:9200 / response_summary / search?q = api:“位置” + AND + transactionoperationstatus:“已收费” + AND + operatorid =’D

  • 问题内容: 这不起作用: 任何想法如何通过id将插入范围缩小到特定行? 问题答案: 在插入语句中,您将没有现有行来执行操作?您要插入新行,是否意味着要执行更新语句?

  • 问题内容: 为什么不能在where子句中使用临时列? 例如,此查询: 这将显示两列,一列称为,另一列称为。是即时创建的,始终为1或0,具体取决于是否有50个或该品牌的产品。 这一切对我来说都是有意义的,除了我不能仅在以下查询中选择时: 这给了我这个错误: 问题答案: 使用来代替: 被评估 前 的。被评估之后。

  • 问题内容: 我正在尝试搜索文本和备注的多列,以查找某些我不想看到的特定短语和黑名单短语。 假设下表 前任。我想找到所有提到(在任何领域中)“苹果”但黑名单中的“苹果酱”的故事。 如何在where子句中使用别名?我找不到有关此主题的任何文档: 1)这种方法可行吗? 2)替代方法是否意味着我将在每次行迭代中执行多个字符串连接? 问题答案: 我不能在where子句中使用别名。 这种方法可行吗? 当然,将

  • 问题内容: 我有这个查询: 但是我想做这样的事情: 如何检查电子邮件是否存在?我要使用电子邮件,如果此字段为空,我要使用email2。我该如何完成? 问题答案: 用于选择字段,然后在其后放置该子句: