Regex Oracle视图-确定视图的从属表是否显示在子查询中
我知道这是一个很长的问题,但是否可以确定视图或代码块中的子查询中是否引用了特定表 如果唯一的解决方案是在视图/查询块的文本上使用正则表达式,那么有人能举例说明如何实现这一点吗 例如,在以下查询中:Regex Oracle视图-确定视图的从属表是否显示在子查询中,regex,oracle,Regex,Oracle,我知道这是一个很长的问题,但是否可以确定视图或代码块中的子查询中是否引用了特定表 如果唯一的解决方案是在视图/查询块的文本上使用正则表达式,那么有人能举例说明如何实现这一点吗 例如,在以下查询中: SELECT col1, the_name FROM ( /* beginning of inline view */ SELECT col1, col2, col3, (select name from table2 where id=2) the_na
SELECT col1, the_name FROM
( /* beginning of inline view */
SELECT col1,
col2,
col3,
(select name from table2 where id=2) the_name /* this is the subquery */
FROM table1
) inline_view /* end of inline view */
我想检测相关子查询中是否引用了表2。然而,尽管table1位于括号之间,是一个内联视图,但它不是一个子查询,我不希望与之匹配。
我希望我的请求有意义…更希望有人能帮助我
谢谢
Tomás这有帮助吗
SELECT *
FROM all_source
WHERE text LIKE '%(%TABLE2%)%'
检查字典视图,您应该在那里找到它
SELECT * FROM ALL_DEPENDENCIES
WHERE REFERENCED_NAME = 'TABLE2' AND REFERENCED_TYPE IN ('TABLE','VIEW');
但它不检测动态语句,例如,此语句未被发现:
cur SYS_REFCURSOR;
BEGIN
OPNE cur FOR 'SELECT * FROM EMP';
...
编程语言比正则表达式高出一步,因此无法使用Regex有效地解析编程语言(尽管有些人已经尝试过,其他人会告诉您可以在Regex中使用递归,这会变得非常混乱和快速)。对于您正在使用的任何编程语言(您没有指定),您都应该找到一个有效的SQL解析器(或者自己编写一个非常基本的解析器,它们并不太难)。或者,我知道这是非常基本的,但是你能搜索一下
table2
?我认为每个人都忽略了子查询和内联视图之间的区别。您的问题有趣且准确,但您可能希望添加粗体警告。这不会区分子查询和内联视图。这也不会说明表是否用于子查询而不是内联视图。(这是一个非常棘手的问题。)@jonearles再次感谢您强调我的实际需求。也许我没有把子查询部分讲清楚。也许这是对我问题的反思,我可能需要重新审视它是如何提出的!。。。