SQLSyntaxErrorException:由于 HSQLDB 中的“COALESCE”导致的数据类型异常

Posted

技术标签:

【中文标题】SQLSyntaxErrorException:由于 HSQLDB 中的“COALESCE”导致的数据类型异常【英文标题】:SQLSyntaxErrorException: data type exception due to `COALESCE` in HSQLDB 【发布时间】:2017-06-08 05:48:46 【问题描述】:

我不得不将 org.hsqldb 库版本从 2.2.9 升级到 2.4.0,以支持带有 NOT EXIST 关键字的模式,正如本网站另一个问题中所建议的那样,但后来我遇到了很多 JUnit 测试失败,

Caused by: java.sql.SQLSyntaxErrorException:                             
data type cast needed for parameter or null literal in statement
[INSERT INTO xxx(y) VALUES (COALESCE(?,?))]

我的 hsqldb 看起来像:

CREATE TABLE xxx (
    y VARCHAR (32) NOT NULL
)

它们唯一对我有用的是在插入之前将 COALESCE 逻辑移动到我的 Java 源代码中。

问题:

    这让我觉得架构中的要求NOT NULL 直到版本 2.4.0 才起作用,这就是为什么我的测试现在才失败的原因。除了删除这个要求,我还能做些什么来避免这个限制?

    有没有像 COALESCE 这样的函数,如果所有参数都为空,则插入默认值?

【问题讨论】:

“他们唯一对我有用的就是在插入之前将 COALESCE 逻辑移动到我的 Java 源代码” 那有什么问题? @Andreas 我想知道是否有任何其他选项可以这样做,例如降级到特定版本或将 sql 查询更改为可以执行相同操作的东西 【参考方案1】:

你可以用演员来修复它:

INSERT INTO xxx(y) VALUES (COALESCE(CAST(? AS VARCHAR(32)),?)

【讨论】:

以上是关于SQLSyntaxErrorException:由于 HSQLDB 中的“COALESCE”导致的数据类型异常的主要内容,如果未能解决你的问题,请参考以下文章

Bug解决 java.sql.SQLSyntaxErrorException 异常

SQLSyntaxErrorException: ORA-00979: 不是 GROUP BY 表达式

java.sql.SQLSyntaxErrorException:表'mydb.alien'不存在

java.sql.SQLSyntaxErrorException:未知列

为啥 Bluemix dashDB 操作会引发 SQLCODE=-1667 的 SqlSyntaxErrorException?

java.sql.SQLSyntaxErrorException: ORA-00904: : 标识符无效