我似乎无法找到合适的组合来实现这一目标。我已经使用Quick DDL和get_ddl函数以及编写自己的SQL从Oracle QL开发人员生成了DDL。所有在SQL Plus和SQL Developer中都可以正常工作,但我无法弄清楚如何让H2接受SQL。
我尝试了不同的变体,不使用架构名称等。似乎没什么用。
SQL:
CREATE TABLE TEST_SCHEMA.SAVED_SEARCHES(
SEARCHID INT GENERATED ALWAYS AS IDENTITY AUTO_INCREMENT BY 1 START WITH 1 NOT NULL,
NAME VARCHAR2(30) NOT NULL,
USERID VARCHAR2(32 BYTE),
WORKGROUPID VARCHAR2(50 BYTE),
ONECLICK VARCHAR2(1 BYTE) NOT NULL
)
连接属性:
<Context reloadable="true" crossContext="true">
<Resource
name="jdbc/cts"
auth="Container"
type="javax.sql.DataSource"
removeAbandoned="true"
removeAbandonedTimeout="30"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="test_schema"
password="oracle"
driverClassName="com.test.h2.H2Driver"
url="jdbc:testh2:mem:testdb;MODE=Oracle;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS TEST_SCHEMA\;SET SCHEMA TEST_SCHEMA"
validationQuery="SELECT 1 FROM DUAL"
/>
</Context>
错误:
Syntax error in SQL statement: expected "(, NOT, NULL_TO_DEFAULT, SEQUENCE, SELECTIVITY, COMMENT, CONSTRAINT, PRIMARY, UNIQUE, NOT, NULL, CHECK, REFERENCES, ,, )"; SQL statement:
答案 0 :(得分:4)
从研究H2数据库中CREATE TABLE语句的语法开始:
http://www.h2database.com/html/grammar.html#create_table
简化的语法是:
CREATE TABLE name (
columnDefinition,
columnDefinition,
....
);
其中columnDefinition
是:
http://www.h2database.com/html/grammar.html#column_definition
columnName dataType [ AUTO_INCREMENT | IDENTITY [ (startInt [,incrementInt ] ) ]]
其中带有[]
括号的元素是可选的
正如您所看到的Oracle语法:
columnName dataType GENERATED ALWAYS AS IDENTITY AUTO_INCREMENT BY 1 START WITH 1
与H2的语法完全不同:
columnName dataType IDENTITY (1,1)
您需要手动重写CREATE TABLE
语句以使其适应H2数据库。
对于VARCHAR2
和(50 BYTE)
长度,H2也没有
您只需使用VARCHAR( 50 )
或超过50,请参阅此链接:
http://www.h2database.com/html/datatypes.html#varchar_type