Эпилог
Я сообщил об этом поведении как об ошибке, и сегодня (2010-05-25) оно исправлено в репозитории SVN hsqldb, для 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") (v.x)