druid SQLUtils.parseStatements解析异常,不支持event , delimiter两个关键字

zaq34kh6  于 3个月前  发布在  Druid
关注(0)|答案(2)|浏览(51)

我们想用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

请确认下是否可以支持这两个语法呢

s4n0splo

s4n0splo1#

直接写CREATE PROCEDURE xxx ()
BEGIN

some sql

END; 可以解析,你试一下

lnxxn5zx

lnxxn5zx2#

delimiter 本身也不是SQL关键字,只是mysql客户端定义的分隔符关键字,可以自行用sqlparser.lexer 解析出来去分割、执行。

相关问题