我正在运行这样的查询:
INSERT INTO `ABC` (
`col1`,
`col2`)
SELECT
`t`.`col1`,
`t`.`col2`
FROM (
SELECT
`opr`.`col1`,
@counter := IF(@var_2 = `opr`.`col_2`, @counter + 1, 1) AS `counter`,
@val_2 := `opr`.`col2`
FROM
(...Some select ...) `opr`
) t
在 SequelPro(SQL 编辑器)中运行这个查询非常完美。但是,当使用 org.skife.jdbi(作为@SqlUpdate)运行它时,用户定义的变量 @counter 始终为 1,从而产生错误的更新。
此外,我尝试将此更新查询转换为存储过程: - 当我从 SequelPro 调用 SP 时,我得到了正确的结果。- 当我从 JDBI 调用 SP 时,我得到错误的结果(@counter == 1)。
Java 正在执行的 SQL 查询是正确的(我查看了我的 MySQL 日志以检查 Java 正在执行什么),但是无法正确评估我的用户定义变量,无论我调用显式查询还是调用包含我的 SP询问。
想法?这是 JDBC 或 org.skife.jdbi 的错误吗?