1

我有以下 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

您能否给我一个提示,这里出了什么问题?

提前致谢。

4

2 回答 2

2

结语

我将此行为报告为错误,今天(2010 年 5 月 25 日)已在 hsqldb SVN 存储库中修复,每个hsqldb-Bugs-2989597。(谢谢,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)

于 2010-04-16T19:18:03.533 回答
-1

我遇到了同样的问题,但在几分钟内就解决了。

它发生在数据值和表结构不同时。在空列值中添加显式(NULL)。

就像我创建了表

测试用例表:

ID TESTCASEID 描述

但是您的插入语句您不想为任何测试用例描述添加任何描述,那么您必须在插入语句中明确说明您必须为描述设置空值

于 2013-10-01T10:15:17.413 回答