Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Oracle视图-确定视图的从属表是否显示在子查询中_Regex_Oracle - Fatal编程技术网

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再次感谢您强调我的实际需求。也许我没有把子查询部分讲清楚。也许这是对我问题的反思,我可能需要重新审视它是如何提出的!。。。