如果这令人困惑,我很抱歉,因为我是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'
如果这听起来很混乱,请道歉,如果需要,我会提供更多信息。
谢谢!