2015-01-15 4 views
0

В настоящее время я пытаюсь автоматизировать базу данных DB2 с помощью сценариев оболочки, но, похоже, проблема с операцией INSERT.Вставка DB2 в таблицу с идентификационным столбцом

Таблицы я создаю выглядеть следующим образом:

CREATE TABLE "TRAINING1" 
(ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (STARTS WITH 1 INCREMENT BY 1), 
F1 VARCHAR(20) NOT NULL, 
name VARCHAR(40) NOT NULL, 
surname VARCHAR(40) NOT NULL, 
CONSTRAINT pk_train1_id primary key(ID)); 

Теперь создание прекрасно работает для всех подобных таблиц, но при попытке вставить данные:

db2 "insert into TRAINING1 values ('hello', 'world', 'foo', 'bar')" 

Я получаю эту ошибку:

SQL0117N The number of values assigned is not the same as the number 
of specified or implied columns or variables. SQLSTATE=42802 

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

db2 "insert into TRAINING1 values (1, 'hello', 'world', 'foo', 'bar')" 

и затем жалуется на эту ошибку:

SQL0798N A value cannot be specified for column "ID" which is defined 
as GENERATED ALWAYS. SQLSTATE=428C9 

Я все еще достаточно новое для DB2, но почти через неделю, я до сих пор не нашел решений для этого еще нет. Я запускаю DB2 Express Edition на 64-битной виртуальной машине Ubuntu. Любые мысли о том, почему это делается?

Благодаря

+0

Вы перечислите 4 колонки символов для 'INSERT ', но в таблице есть только 3 символьных столбца. –

ответ

2

Для того, чтобы пропустить через колонку в качестве INSERT заявлении необходимо указать столбцы, которые не должны быть пропущены:

db2 "insert into TRAINING1 (f1, name, surname) values ('hello', 'world', 'foo')"

+0

Разве это не должно быть интуитивно понятным? Со многими другими приложениями SQL нет необходимости явно перечислять столбцы для заполнения. Является ли DB2 таким же образом? –

+0

Ну в любом случае, это сработало, так что спасибо! –

+0

@ ZenadiaGroenewald - Если вы не указали столбцы, как это должно знать, какие из них вы хотите заполнить? Даже когда вы поставляете все столбцы, столбцы которых действительно заполняются, вас может удивить - если вы добавите новый столбец где-то посередине, и типы все еще совместимы, данные могут оказаться в странных местах. Вы должны использовать _allways_ столбцы списка для вставки, даже когда вы даете им все, чтобы избежать таких сюрпризов. –

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