Сбой условной вставки в HSQL - PullRequest
0 голосов
/ 27 ноября 2018

Я использую HSQL для выполнения условной вставки, и она продолжает сбой за исключением.

Java + MyBatis + HSQL

Запрос:

INSERT INTO CATS (ID, NAME) 
SELECT #{id}, #{name}
WHERE NOT EXISTS 
    (SELECT * from CATS WHERE NAME = #{name})

Исключение:

Caused by: java.sql.SQLSyntaxErrorException: unexpected token: WHERE in statement [INSERT INTO CATS (ID, NAME) select ?, ? WHERE NOT EXISTS (SELECT * from CATS WHERE NAME = ?)]
[junit]     at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
[junit]     at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
[junit]     at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
[junit]     at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
[junit]     at org.apache.ibatis.datasource.pooled.PooledConnection.invoke(PooledConnection.java:245)
[junit]     at com.sun.proxy.$Proxy49.prepareStatement(Unknown Source)

Я проверил, не поддерживаются ли условные вставки в HSQL.Но, похоже, это не так

Я уже выполнил set database sql syntax pgs true, поэтому не должно быть никаких проблем с выполнением запросов RAW postgres в HSQL

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Проблема в том, что мой запрос условной вставки является специфичным для postgres и не может быть выполнен в HSQL.Я использовал otj-pg-внедренный для экземпляра postgres во время выполнения вместо HSQL, и запрос работал.

0 голосов
/ 27 ноября 2018

Если вы хотите получить столбец динамически, вам нужно использовать $ вместо #

INSERT INTO CATS (ID, NAME) 
SELECT ${id}, ${name}
WHERE NOT EXISTS 
    (SELECT * from CATS WHERE NAME = #{name})
...