我正在使用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)
或类似?