我正在为工作负载自动化过程构建一个巨大的元数据字典和查找应用程序,这些应用程序几乎都是Sybase和Oracle直接使用的SQL脚本。我需要做的是对每个脚本中的每条SQL语句进行清点,并提取语句类型(例如INSERT、UPDATE、CREATE TABLE等)、tables into、tables from等内容。
我有一个原型解析应用程序,它主要使用正则表达式完成一项不错的工作。像这样的编程是乏味的,超越了任何噩梦,坦率地说,我宁愿在夏天挖3条沟,而不是覆盖所有可能的用例场景。另外,我觉得我是在重新发明轮子。我想一定有一些API,如果你只提供给它一条SQL语句,它会告诉你#1它是否可以编译,然后为你提取可以通过普通POJO工具访问的结构。比如getStatementType、getFromTables()等。
我正在处理的脚本是用几乎所有的编码风格编写的,没有标准的格式,也有各种语句形式和语法(聚合,子查询,你能想到的)。
所以我的问题是:有没有一个API可以解析给定SQL的SQL,以及它可能特定于哪个供应商来返回规范化的详细信息?
我知道Eclipse有一些插件可以做类似的事情(DDL编辑器和Quantum DB),所以我想我可以偷偷带上一些处理SQL识别的API。有什么想法?
发布于 2012-10-13 01:33:28
您可以使用antlr和一种特定于供应商的或标准的sql grammars进行解析。
发布于 2014-06-20 15:59:23
您可以将ZQL parser用于所有类型的SQL查询。ZQL可以执行this tutorial中指定的所有SQL操作。
https://stackoverflow.com/questions/12863532
复制相似问题