我需要编写一个程序来接受基本的 SQL 选择语句并输出一个 XML 文件,该文件将语句分解成它的组成部分(输出列、输入表、连接、分组依据、聚合等) .我至少需要在 from 语句中支持 2 个表、不同的连接类型、where 子句、group by 和 having。如果可以支持更复杂的 sql(例如子查询),那是一种奖励,但不是必需的。
我检查了 ANTLR,它看起来像一个陡峭的学习曲线。鉴于我有能力要求 SQL 相当简单,我应该尝试手工编写代码还是应该踏上 ANTLR 的世界?
最佳答案
我认为您不需要使用 ANTLR 重新发明这样的 sql 解析器。下面是一个将 select SQL 语句解码为元数据的示例:
SELECT e.last_name AS name,
e.commission_pct comm,
e.salary * 12 "Annual Salary"
FROM scott.employees AS e
WHERE e.salary > 1000
ORDER BY
e.first_name,
e.last_name;
元信息:
Select statement:
Select set type: none
select clause:
Columns
Fullname:e.last_name
Prefix:e Column:last_name alias:name
Fullname:e.commission_pct
Prefix:e Column:commission_pct alias:comm
Fullname:e.salary * 12
Prefix: Column:e.salary * 12 alias:"Annual Salary"
from clause:
scott.employees as e
tableowner: scott
tablename: employees
tablealias: e
where clause:
e.salary > 1000
order by clause:
e.first_name,
e.last_name
如果这是你需要的,那么你可以检查this article说明如何使用 sql parser实现这一目标。
关于sql - 我应该使用 ANTLR 来转换简单的 SQL 选择语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8098518/