我们想用druid的sql解析器做语句的短句以及schema的填充功能, 实现过程中发现好像不支持 event, delimiter 两个关键字, 对应的语句及报错如下: (我们是使用navicat导出的mysql数据库结构脚本直接读取进行parseStatment操作的)
语句:
delimiter ;;
CREATE PROCEDURE `xxx`()
BEGIN
# some sql
END
;;
delimiter ;
异常:
Exception in thread "main" com.alibaba.druid.sql.parser.ParserException: TODO pos 14, line 3, column 8, token IDENTIFIER EVENT
语句:
CREATE EVENT `xxx`
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 0 HOUR)
ON COMPLETION PRESERVE
DO CALL xxx();
异常:
Exception in thread "main" com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'delimiter ;;
CREATE PROCEDURE ', expect IDENTIFIER, actual IDENTIFIER pos 9, line 1, column 10, token IDENTIFIER delimiter
请确认下是否可以支持这两个语法呢
2条答案
按热度按时间s4n0splo1#
直接写CREATE PROCEDURE
xxx
()BEGIN
some sql
END; 可以解析,你试一下
lnxxn5zx2#
delimiter 本身也不是SQL关键字,只是mysql客户端定义的分隔符关键字,可以自行用sqlparser.lexer 解析出来去分割、执行。