【问题标题】:Insert All Into query not executing against hsql db even after setting dialect Oracle即使在设置方言 Oracle 之后,也不会对 hsql db 执行全部插入查询
【发布时间】:2015-02-02 03:50:38
【问题描述】:

我有一个查询,它将列表中的数据插入到 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 中的嵌入式 DB)执行相同的查询时,它会抛出一个异常,指出 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

【问题讨论】:

    标签: spring oracle hsqldb


    【解决方案1】:

    我不认为SET DATABASE SQL SYNTAX ORA TRUE 启用了对Oracle SQL 语法的完全支持。根据the docs

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      相关资源
      最近更新 更多