记一次用java(JDBC) 创建ORACLE触发器错误。 sql injection violation, syntax error: TODO TRIGGER trigger
报错如下图所示
解决过程:
第一步:检查sql语句
将创建sql 放到plsql中执行,正确运行。触发器编译成功。
第二步:
根据打印的异常信息,发现是在druid.wall.WallFilter类中check方法抛出异常。
打断点debug查看跟踪源码,找到异常抛出的位置。
位段代码位于com.alibaba.druid.sql.parser.SQLStatementParser parseCreate()方法中。
因为创建触发器语句使用了 "CREATE OR REPLACE TRIGGER " 结合上图源码可得知:
该druid版本中只支持CREATE OR REPLACE PROCEDURE 和 CREATE OR REPLACE VIEW。于是怀疑druid版本过低不支持该格式语句。
升级最新版druid连接池;成功解决
原版本:
升级后:
注:该问题并不难解决,只是网上相关信息较少,帮助后来者少些弯路。