druid版本:最新1.1.0 sql: create table month_part (c1 number,c3 date) partition by range(c3) interval(numtoyminterval (1,'month')) (partition part1 values less than (to_date('2010-01-01','YYYY-MM-DD')), partition part2 values less than (to_date('2010-02-01','YYYY-MM-DD')) )
调用方法: OracleStatementParser parser=new OracleStatementParser(allSql); List stmtList=parser.parseStatementList(); for(SQLStatement stmt : stmtList) { System.out.println("druid parse sql is:"+stmt.toString()); } 此时输出的sql结果为: druid parse sql is:CREATE TABLE month_part ( c1 number, c3 date ) PARTITION BY RANGE (c3) INTERVAL numtoyminterval(1, 'month') ( PARTITION part1 VALUES LESS THAN (to_date('2010-01-01', 'YYYY-MM-DD')), PARTITION part2 VALUES LESS THAN (to_date('2010-02-01', 'YYYY-MM-DD')) ); interval后面numtoyminterval两边括号不见了,然后check报错 expect LPAREN, actual IDENTIFIER numtoyminterval
原提问者GitHub用户zzx8170
在 Druid 1.1.0 版本中,解析 Oracle 数据库中的 INTERVAL 关键字存在一个 bug,导致解析结果不正确。具体表现为 INTERVAL 后面的 numtoyminterval
中的括号消失,从而引发解析错误。
为了解决这个问题,你可以尝试以下方法:
1. 升级到最新版本:Druid 团队已经意识到这个 bug,并在后续的版本中进行了修复。你可以升级到最新版本的 Druid(例如 1.1.14 版本),以获取修复后的解析行为。
2. 关闭 intervalCheck 功能(不推荐):如果你无法升级到最新版本或者有其他原因不能立即升级,可以在 Druid 数据源的配置文件中关闭 WallFilter 的 intervalCheck 功能。通过设置 druid.filter.wall.intervalCheck
为 false
,来禁用对 INTERVAL 关键字的特殊处理。请注意,这可能会导致其他语法校验问题,因此不推荐长期使用。
建议优先考虑升级到最新版本,以获得最新的修复和改进。如果问题仍然存在,请向 Druid 社区报告该问题,以便他们能够意识到并修复该 bug。
Druid Spring Boot Starter 中,使用 Oracle 数据库时,如果你的 SQL 语句中包含 INTERVAL 关键字,可能会导致解析错误。
这是因为 Druid 数据源默认使用了 WallFilter 进行 SQL 语句的语法解析和校验,而 WallFilter 对于 INTERVAL 关键字的解析存在一些问题。
为了解决这个问题,你可以尝试在 Druid 数据源的配置文件中关闭 WallFilter 的 intervalCheck 功能,例如:
yaml
Copy
spring:
datasource:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521/orcl
username: scott
password: tiger
druid:
filter:
wall:
# 关闭intervalCheck
intervalCheck: false
这样修改后,Druid 数据源将不再对 INTERVAL 关键字进行特殊处理,而是将其视为普通的 SQL 关键字。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。