Я использую 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