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 搜索表名的主要内容,如果未能解决你的问题,请参考以下文章