2010-10-01 106 views
1

我正在研究如何更改某些單元測試(對於在DB2上運行的應用程序)來使用Derby。在發現this question的答案聲稱DB2和Derby非常兼容時,似乎可以將DDL從DB2數據庫中取出並在Derby數據庫上運行它。但我似乎發現了Derby不能與德比DDL一起使用的情況。Derby相當於DB2的「NOT NULL WITH DEFAULT」

所以我DDL爲DB2 9.1,看起來像這樣寫的:

CREATE TABLE FOO (
    FOO_ID CHAR(17) NOT NULL, 
    FOO_SOMESTUFF CHAR(17) NOT NULL WITH DEFAULT , 
    FOO_MORESTUFF CHAR(1) NOT NULL WITH DEFAULT , 
    FOO_DT DATE NOT NULL WITH DEFAULT 
); 

運行這個DDL在IJ不工作,我得到這個語法錯誤:

ij> run 'c:/derby/db-derby-10.6.1.0-bin/foo.sql'; 
ij> CREATE TABLE FOO (
      FOO_ID CHAR(17) NOT NULL, 
      FOO_SOMESTUFF CHAR(17) NOT NULL WITH DEFAULT , 
      FOO_MORESTUFF CHAR(1) NOT NULL WITH DEFAULT , 
      FOO_DT DATE NOT NULL WITH DEFAULT 
    ); 
ERROR 42X01: Syntax error: Encountered "," at line 3, column 62. 
Issue the 'help' command for general information on IJ command syntax. 
Any unrecognized commands are treated as potential SQL commands and executed dir 
ectly. 
Consult your DBMS server reference documentation for details of the SQL syntax s 
upported by your server. 

什麼Derby的DDL將導致與DB2 DDL相同的默認值? 我得知我可能需要更改DDL,它充滿了奇怪的東西,如AUDIT NONEDATA CAPTURECCSID EBCDIC,我將不得不擺脫Derby的工作。但是,如果有一個不同的內存數據庫比Derby做得更好,我願意接受這些建議,但是對全部空白默認的東西對於這個代碼庫是一件大事。

回答

3

我其實並沒有在德比嘗試過。但我的猜測是,它會工作,如果你明確說明什麼是默認值,如下所示:

CREATE TABLE FOO (
    FOO_ID CHAR(17) NOT NULL, 
    FOO_SOMESTUFF CHAR(17) NOT NULL WITH DEFAULT ' ' , 
    FOO_MORESTUFF CHAR(1) NOT NULL WITH DEFAULT ' ', 
    FOO_DT DATE NOT NULL WITH DEFAULT CURRENT DATE 
); 
+0

是的我相信這是正確的語法。以下是默認表達式的Derby文檔鏈接:http://db.apache.org/derby/docs/dev/ref/rrefsqlj30540.html#rrefsqlj30540 – 2010-10-01 22:42:07