SQL REGEX 搜索表名

Posted

技术标签:

【中文标题】SQL REGEX 搜索表名【英文标题】:SQL REGEX search for table name 【发布时间】:2017-03-20 09:15:01 【问题描述】:

这是我的第一篇文章,所以请原谅我在写这篇文章时可能犯的任何错误。

我有一个充满表视图的 oracle 数据库模式。我想使用“all_views”表中的“TEXT_VC”列来获取源表名列表。

这是我到目前为止的声明:

SELECT view_name, text_vc, REGEXP_SUBSTR(TEXT_VC,'from (.+?) ') AS source_table 
FROM all_views 
WHERE owner = 'OWNER';

我仍然有这个正则表达式的视图问题。 首先,我得到“来自table_name”的结果。我不想在我的结果集中得到“来自”。

其次,TEXT_VC 列基本显示了视图后面的 SQL。所以在某些情况下我没有得到任何结果,因为有换行符。我尝试使用 \n 和 \r 但我无法生成我想要的结果。

谁能帮帮我?

【问题讨论】:

我不相信 rexec 一般可以提供帮助。考虑select from( select from... ) 视图。你可能需要一个解析器见***.com/questions/5735791/parser-for-oracle-sql 【参考方案1】:
select * from all_dependencies

演示

create table mytable_1 (i int);
create table mytable_2 (i int);

create view myview 
as 
select  count(*) as cnt
from          mytable_1 t1 
        join  mytable_2 t2 
        on    t2.i = t1.i
;

select    * 
from      all_dependencies
where     owner = 'DMARKOVITZ'
      and name  = 'MYVIEW'
;      

+------------+--------+------+------------------+-----------------+-----------------+----------------------+-----------------+
|   OWNER    |  NAME  | TYPE | REFERENCED_OWNER | REFERENCED_NAME | REFERENCED_TYPE | REFERENCED_LINK_NAME | DEPENDENCY_TYPE |
+------------+--------+------+------------------+-----------------+-----------------+----------------------+-----------------+
| DMARKOVITZ | MYVIEW | VIEW | DMARKOVITZ       | MYTABLE_1       | TABLE           | (null)               | HARD            |
| DMARKOVITZ | MYVIEW | VIEW | DMARKOVITZ       | MYTABLE_2       | TABLE           | (null)               | HARD            |
+------------+--------+------+------------------+-----------------+-----------------+----------------------+-----------------+

【讨论】:

谢谢。这个解决方案甚至比我的尝试更好。使用带有递归 sql 的解决方案,我能够回到源表。 SELECT * FROM (SELECT * FROM DBA_DEPENDENCIES START WITH OWNER = 'SCHEMA_OWNER' AND REFERENCED_TYPE = 'VIEW' CONNECT BY OWNER = PRIOR REFERENCED_OWNER AND NAME = PRIOR REFERENCED_NAME AND TYPE = PRIOR REFERENCED_TYPE AND TYPE = 'VIEW') WHERE REFERENCED_TYPE <> 'VIEW';

以上是关于SQL REGEX 搜索表名的主要内容,如果未能解决你的问题,请参考以下文章

SQl查询数据库表名表的列名数据类型主键

SQL REGEX 搜索表名

MYSQL 数据库名表名字段名查询

MySQL数据库建库时SQL语句中数据库名表名用引号的问题以及COLLATE utf8_general_ci的含义

SQL语句优化系列三(关于select查询)

总结-常用sql语句