用于检测动态SQL的正则表达式

时间:2013-07-22 20:29:52

标签: java sql regex tsql dynamic-sql

如果这令人困惑,我很抱歉,因为我是SQL的初学者,并且不熟悉标准术语,所以这里有......

我在java中编写一个SQL代码美化器,使用正则表达式来检测SQL语法和关键字。我已经广泛阅读了SQL和Regex,并且我很熟悉它们。我有一切工作除了引号/字符串检测。从逻辑上讲,我想忽略单引号内的任何内容,以避免格式化字符串。

例如,

SELECT x FROM y WHERE z = 'black or white'

会格式化select,from和where语句,但忽略文本“黑色或白色”,返回

SELECT x
FROM   y
WHERE  z = 'black or white'

忽略引号中的所有文本似乎很简单,正则表达式'.+?'被忽略但问题是SQL文件的许多块实际上存储为“动态”(?)SQL,其中查询存储在字符串

EXECUTE IMMEDIATE 'SELECT d.id, e.name
    FROM dept_new d, TABLE(d.emps) e  

    WHERE e.id = 1'

这就是我的问题,我如何区分像'this should not be formatted'这样的简单字符串和嵌入引号'SELECT x FROM y WHERE z'

的SQL查询

如果这听起来很混乱,请道歉,如果需要,我会提供更多信息。

谢谢!

0 个答案:

没有答案