2016-04-21 58 views
1

我似乎無法弄清楚正確的組合以使其工作。我使用Quick DDL和get_ddl函數從Oracle QL開發人員生成了DDL,並編寫了自己的SQL。所有在SQL Plus和SQL Developer中工作正常,但我無法弄清楚如何讓H2接受SQL。在內存數據庫中爲H2在Oracle上創建表的問題

我試過不同的變化,放棄架構名稱等等。似乎沒有任何工作。

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: 

回答

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 ]) ]] 

各種元素withins []括號是可選

正如你看到Oracle的語法:

columnName dataType GENERATED ALWAYS AS IDENTITY AUTO_INCREMENT BY 1 START WITH 1 

比H2的語法完全不同:

columnName dataType IDENTITY (1,1) 

您需要手工改寫CREATE TABLE聲明,以使其適應H2數據庫。


此外H2不alows爲VARCHAR2(50 BYTE)長度
你需要使用剛剛超過50 VARCHAR(50)或更多,請參閱以下鏈接:
http://www.h2database.com/html/datatypes.html#varchar_type

+0

感謝,並沒有意識到H2有它的自己的SQL語法,我沒有閱讀文檔的錯誤。 –

+0

將DDL修改爲符合H2後,我現在得到一個表未找到SQL錯誤。我有DB_CLOSE_DELAY設置集。思考? –