小编典典

HSQLDB中的原子INSERT / SELECT

sql

我有以下hsqldb表,其中将UUID映射到自动递增的ID:

SHORT_ID (BIG INT, PK, auto incremented) | UUID (VARCHAR, unique)

创建命令:

CREATE TABLE mytable (SHORT_ID BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, UUID VARCHAR(36) UNIQUE)

为了同时添加新对,我想使用atomicMERGE INTO语句。所以我的(准备好的)语句看起来像这样:

MERGE INTO mytable USING (VALUES(CAST(? AS VARCHAR(36)))) AS v(x) ON mytable.UUID = v.x WHEN NOT MATCHED THEN INSERT VALUES v.x

当我执行该语句(正确设置占位符)时,我总是得到一个

Caused by: org.hsqldb.HsqlException: row column count mismatch

您能给我一个提示吗,这是怎么回事?

提前致谢。


阅读 207

收藏
2021-04-22

共1个答案

小编典典

结语

我将此行为报告为一个错误,并且已根据(hsqldb-
Bugs-2989597
)在hsqldb
SVN存储库中修复了该问题,今天(2010-05-25)进行了修复。(谢谢,hsqldb!)

更新的答案

整齐!这是我要从事的工作HSQLDB 2.0.0rc9,它支持您发布的语法和错误消息:

MERGE INTO mytable
   USING (SELECT 'a uuid' FROM dual) AS v(x) -- my own "DUAL" table
   ON (mytable.UUID = v.x)
   WHEN NOT MATCHED THEN INSERT
     VALUES (NULL, x)                        -- explicit NULL for "SHORT_ID" :(

请注意,我 不是 说服2.0.0rc9接受... THEN INSERT (UUID) VALUES (x),这是IIUC比上面一个完全可以接受的,更清晰的规范。(我的SQL知识很少,但这对我来说似乎是个错误。)

原始答案

您似乎正在将单个值(一个1元组)插入到具有多列的表中。也许您可以将语句结尾修改为:

…未匹配插入(“ UUID”)值时(vx)

2021-04-22