我有一个查询,它将列表中的数据插入到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版本 - 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
答案 0 :(得分:2)
我认为SET DATABASE SQL SYNTAX ORA TRUE
不支持完全支持Oracle SQL语法。根据{{3}}
此属性设置为true时,可以支持非标准类型。它还支持DUAL,ROWNUM,NEXTVAL和CURRVAL语法,并且还允许与该方言的其他方面兼容。
因此,它似乎对这些Oracle构造提供了有限的支持,但不是您要锁定的完整SQL语法插件。
如果要在多个数据库中运行SQL,您确实需要某种抽象层,例如Hibernate或QueryDSL。