2015-06-04 4 views
0

Я пытаюсь создать таблицу в инструкции IF-THEN-ELSE в Java. Вот что я пытался до сих пор:DB2, Java: не удается CREATE TABLE условно

stmt.execute(
       "BEGIN IF (SELECT tabname FROM syscat.tables WHERE tabname = 'KUNDENKONTAKTDATEN' and tabschema = 'GRP35') IS NULL THEN " 
       + "CREATE TABLE KundenKontaktDaten(Kunden_Nr INT NOT NULL PRIMARY KEY, Twitter_Id VARCHAR(40), Google_Id BIGINT, Facebook_Id BIGINT, Skype_Id VARCHAR(64), Telefonnummer VARCHAR(50));" 
       + "ELSE " 
       + "DELETE FROM KundenKontaktDaten; " 
       + "END IF;" 
       + "END"); 

Запуск этого один я всегда получаю следующее исключение:

DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=KEY;INT NOT NULL PRIMARY;<references_spec>, DRIVER=4.13.80 

Удаление NOT NULL и PRIMARY KEY из Kunden_Nr возвращает следующее исключение:

DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=<ddl-statement>, DRIVER=4.13.80 

Есть ли у кого-нибудь идеи, как справиться с этим?

приветствует

+0

Вы можете переместить логику на сторону java. –

+0

К сожалению, профессор хочет, чтобы мы вместо этого использовали инструкции sql. –

ответ

0

Большинство DDL заявления, в том числе CREATE TABLE, не могут быть скомпилированы в изолированном соединения SQL (то, что вы могли бы назвать анонимный блок). Вам необходимо будет выполнить его динамически:

stmt.execute(
    "BEGIN IF (SELECT tabname FROM syscat.tables WHERE tabname = 'KUNDENKONTAKTDATEN' and tabschema = 'GRP35') IS NULL THEN " 
    + "EXECUTE IMMEDIATE 'CREATE TABLE KundenKontaktDaten (...)';" 
    + ... 
+0

Да, уже пробовал этот. Не работает. :-(Наконец, я переместил логику в java и заставил ее работать. Спасибо за ваши ответы! –