2010-10-01 3 views
1

Я изучаю, насколько возможно изменить некоторые модульные тесты (для приложения, работающего на DB2), для использования Derby. Найдя this question, где в ответе утверждается, что DB2 и Derby очень совместимы, казалось, что возможно извлечь DDL из базы данных DB2 и запустить ее в базе данных Derby. Но я, кажется, нашел случай, когда 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. 

Что такое DDL для Derby, который приведет к тем же значениям по умолчанию, что и DB2 DDL? Я получаю, что мне может понадобиться изменить DDL, он полон странных вещей, таких как AUDIT NONE и DATA CAPTURE и CCSID EBCDIC, что мне придется избавиться от работы Дерби. Но дефолт для all-blanks - это большое дело для этой кодовой базы, если в этой базе данных есть другая база данных, которая будет лучше, чем 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 –

Смежные вопросы