2016-04-21 9 views
1

Ich kann nicht scheinen, die richtige Kombination zu finden, um dies zum Laufen zu bringen. Ich habe DDL vom Oracle QL Entwickler mit der schnellen DDL- und den get_ddl-Funktionen erzeugt sowie mein eigenes SQL geschrieben. Alle funktionieren gut in SQL Plus und SQL Developer, aber ich kann nicht herausfinden, wie man H2 dazu bringt, SQL zu akzeptieren.Probleme beim Erstellen von Tabellen für Oracle auf H2 im Speicher DB

Ich habe verschiedene Variationen ausprobiert, den Namen des Schemas weggelassen usw. Nichts scheint zu funktionieren.

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 
) 

Verbindungseigenschaften:

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

Fehler:

Syntax error in SQL statement: expected "(, NOT, NULL_TO_DEFAULT, SEQUENCE, SELECTIVITY, COMMENT, CONSTRAINT, PRIMARY, UNIQUE, NOT, NULL, CHECK, REFERENCES, ,,)"; SQL statement: 

Antwort

4

Starten von einer Syntax von CREATE TABLE-Anweisung in H2 Datenbank studieren:
http://www.h2database.com/html/grammar.html#create_table
Eine vereinfachte Syntax:

CREATE TABLE name (
    columnDefinition, 
    columnDefinition, 
    .... 
); 

wo columnDefinition ist:
http://www.h2database.com/html/grammar.html#column_definition

columnName dataType [ AUTO_INCREMENT | IDENTITY [ (startInt [,incrementInt ]) ]] 

wo Elemente withins [] Klammern optional sind

Wie Sie sehen Oracle-Syntax:

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

ist völlig anders als H2 Syntax:

columnName dataType IDENTITY (1,1) 

Sie müssen die CREATE TABLE Anweisung von Hand neu zu schreiben, um es zu H2-Datenbank anzupassen.


Auch H2 nicht für VARCHAR2 und (50 BYTE) Länge hat alows
Sie als 50 nur VARCHAR(50) oder mehr verwenden müssen, finden Sie auf diesen Link:
http://www.h2database.com/html/datatypes.html#varchar_type

+0

Danke, war nicht klar, H2 hatte es eigene SQL-Syntax, mein Fehler für das Lesen des Dokuments. –

+0

Nachdem ich die DDL so geändert habe, dass sie H2-kompatibel ist, erhalte ich jetzt einen SQL-Fehler für die Tabelle nicht gefunden. Ich habe die DB_CLOSE_DELAY Einstellung festgelegt. Gedanken? –