即使在设置方言Oracle之后,Insert All Into查询也不会针对hsql db执行

时间:2014-12-04 10:03:24

标签: spring oracle hsqldb

我有一个查询,它将列表中的数据插入到Oracle DB表中。查询格式为

Insert All 
Into Table_A (Column_A, Column_B) Values (Value_A1, Value_B1) 
Into Table_A (Column_A, Column_B) Values (Value_A2, Value_B2) 
select * from dual;

当我针对Oracle DB运行它时,此查询正常工作。

但是当我作为测试的一部分对HSQLDB(Spring中的嵌入式数据库)执行相同的查询时,它会抛出一个异常,说SQL语法不正确。

我通过指定SET DATABASE SQL SYNTAX ORA TRUE;

为hsql使用Oracle语法

hsql版本 - 2.3.2

即使在指定Oracle方言后,任何人都可以帮助解决这个问题吗?

我得到的异常堆栈的一部分粘贴在这里 -

----------


DEBUG [http-bio-8080-exec-3] (SQLErrorCodeSQLExceptionTranslator.java281) - Unable to translate SQLException with Error code '-5581', will now try the fallback translator
org.springframework.jdbc.BadSqlGrammarException: 
### Error updating database.  Cause: java.sql.SQLSyntaxErrorException: unexpected token: ALL required: INTO : line: 3
### SQL: Insert All         INTO TABLE_A (column_a, column_b) VALUES (?,?)         INTO TABLE_A (column_a, column_b, TABLE_A_active) VALUES (?,?)         select * from dual
### Cause: java.sql.SQLSyntaxErrorException: unexpected token: ALL required: INTO : line: 3
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: unexpected token: ALL required: INTO : line: 3

1 个答案:

答案 0 :(得分:2)

我认为SET DATABASE SQL SYNTAX ORA TRUE不支持完全支持Oracle SQL语法。根据{{​​3}}

  

此属性设置为true时,可以支持非标准类型。它还支持DUAL,ROWNUM,NEXTVAL和CURRVAL语法,并且还允许与该方言的其他方面兼容。

因此,它似乎对这些Oracle构造提供了有限的支持,但不是您要锁定的完整SQL语法插件。

如果要在多个数据库中运行SQL,您确实需要某种抽象层,例如Hibernate或QueryDSL。