Дерби-эквивалент DB2 "НЕ НУЛЬ С ПО УМОЛЧАНИЮ" - PullRequest
1 голос
/ 01 октября 2010

Я исследую, насколько реально изменить некоторые модульные тесты (для приложения, работающего в DB2) на использование Derby.Найдя этот вопрос , где в ответе утверждается, что DB2 и Derby очень совместимы, это выглядело как возможность извлечь DDL из базы данных DB2 и запустить его в базе данных Derby.Но я, кажется, нашел случай, когда Derby не работает с Derby DDL.

Поэтому у меня написан 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, от которых мне придется избавиться, чтобы Дерби работал.Но установка по умолчанию для всех бланков является большой проблемой для этой кодовой базы, если есть другая база данных в памяти, которая будет лучше, чем Derby, я открыт для предложений.

1 Ответ

3 голосов
/ 01 октября 2010

Я на самом деле не пробовал это в Дерби. Но я предполагаю, что это сработает, если вы явно укажете значения по умолчанию, например:

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
);
...