HSQLDB在Oracle语法兼容模式下不处理CHAR(1 BYTE)类型

时间:2013-02-19 23:36:14

标签: oracle maven hsqldb toad sql-maven-plugin

我正在使用Toad导出Oracle数据库并尝试生成可以通过HSQLDB导入的SQL DDL。

我正在使用maven创建我的HSQL数据库并使用配置了HSQLDB JDBC驱动程序的sql-maven-plugin,并指定oracle语法兼容性。然后我加载一些SQL语句来创建我的表。

我遇到的问题是类型定义CHAR(1 BYTE)。我可以使用CHAR(1)CHAR(10)CHAR(1 OCTETS)甚至VARCHAR2(1 BYTE)等类型,但不能使用CHAR(1 BYTE)

例如,HSQLDB将成功执行以下语句:

CREATE TABLE FOO
(
    a VARCHAR2(1),
    b CHAR(1),
    c VARCHAR2(10),
    d CHAR(10),
    e VARCHAR2(1 OCTETS),
    f CHAR(1 OCTETS),
    g VARCHAR2(1 BYTE)
);

但以下内容将失败:

CREATE TABLE BAR
(
    a CHAR(1 BYTE)
)

具体来说,sql-maven-plugin将失败:

[ERROR] ... unexpected token: BYTE required: ) 

配置

这是我目前的配置:

Toad 10.6.1.3 JDK 1.6.0_38

的Maven:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>sql-maven-plugin</artifactId>
    <version>1.5</version>
    <dependencies>
        <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>2.2.9</version>
        </dependency>                    
    </dependencies>
    <configuration>
        <driver>org.hsqldb.jdbcDriver</driver>
        <url>jdbc:hsqldb:file:target/db/testdb;sql.syntax_ora=true</url>
        <username>sa</username>
        <password></password>
        <skip>${maven.test.skip}</skip>
    </configuration>
    <executions>
        <execution>
            <id>create-test-db</id>
            <phase>process-test-resources</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <autocommit>true</autocommit>
                <srcFiles>
                    <srcFile>src/test/resources/sql/FOO.sql</srcFile>
                    ... etc ...
                </srcFiles>
            </configuration>
        </execution>
    </executions>          
</plugin>

问题

导入HSQLDB时,如何支持Oracle SQL类型CHAR(1 BYTE)?是否有可以在JDBC URL中指定的HSQLDB属性来处理这个问题?或者是否有一个Toad选项会写CHAR(1)而不是CHAR(1 BYTE)

或许我需要对Toad生成的脚本进行后期处理,将CHAR (1 BYTE)替换为CHAR(1)CHAR(1 OCTETS)或类似?

0 个答案:

没有答案