使用 DB2 语法截断 H2Database 中的表

Posted

技术标签:

【中文标题】使用 DB2 语法截断 H2Database 中的表【英文标题】:Truncate table in H2Database with DB2 syntax 【发布时间】:2020-01-29 18:21:36 【问题描述】:

我正在尝试使用 h2database 测试我的 DB2 查询,但在尝试截断表时遇到了问题。

这是我的查询:TRUNCATE TABLE SCHEMA.TABLE_NAME IMMEDIATE

错误:

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "TRUNCATE TABLE TOPACC.STREAM_FORECAST IMMEDIATE[*]"; SQL statement:
TRUNCATE TABLE TOPACC.STREAM_FORECAST IMMEDIATE [42000-199]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:451)

我的配置:

private Properties hibernateProperties() 
    Properties properties = new Properties();
    properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
    properties.put("hibernate.show_sql", true);
    properties.put("hibernate.default_schema", "SCHEMA_NAME");
    properties.put("hibernate.connection.driver_class", "org.h2.Driver");
    properties.put("hibernate.connection.username", "NAME");
    properties.put("hibernate.connection.password", "");
    properties.put("hibernate.connection.url", "jdbc:h2:mem:testdb;MODE=DB2;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS SCHEMA_NAME");
    properties.put("hibernate.hbm2ddl.auto", "create");

    return properties;

【问题讨论】:

【参考方案1】:

H2 兼容模式不完全支持引擎特定的 SQL 语法。在这种特殊情况下,DB2 兼容模式不支持TRUNCATE TABLE 语句的IMMEDIATE 选项。

兼容模式详情可参考H2 documentation

【讨论】:

以上是关于使用 DB2 语法截断 H2Database 中的表的主要内容,如果未能解决你的问题,请参考以下文章

db2存储过程动态sql被截断

截断GBQ中的表

瞬间截断和插入同一张表

使用函数拆分 db2 表中的数据

自己开发DB2工具 (11)

从 Google 电子表格中的一个单元格导出 DB2 DDL