2017-02-17 21 views
0

Так что я был под впечатлением, что NOT NULL DEFAULT, если используется вместе с именем столбца будет заполнить значения по умолчаниюНе понимая, не пустое значение по умолчанию

INSERT INTO TPAVIT/SP001F (sp1ruln,SP1FILE,SP1FLD,   
SP1CND,SP1VAL,SP1STID)       
VALUES(3,'ITMRVA','ENGNO','LIKE','%416050%','PLD') 

Ниже ошибка приходит вверх:

Null values not allowed in column or variable SP1SEQNO. 

но я определил SP1SEQNO ниже

SP1SEQNO CHAR(3)  NOT NULL DEFAULT 

так не должно это указать значение по умолчанию, если ВСТАВИТЬ лань sn't? это поле является первичным ключом.

+1

Вы не указали, что такое значение по умолчанию. – mustaccio

+0

Я думал, что это будет значение по умолчанию, основанное на типе данных? См. Https://www.ibm.com/support/knowledgecenter/en/SSEPEK_11.0.0/intro/src/tpc/db2z_defaultvalues.html –

+0

Возможно, вам следует использовать справочное руководство для конкретной версии _your_, а не DB2 для z/OS v11. – mustaccio

ответ

1

Я думаю, что проблема здесь primary key. На самом деле не имеет смысла иметь значение по умолчанию для столбца первичного ключа, так как вы можете только добавить это значение по умолчанию в таблицу один раз. После этого вы получите дубликаты ключевых ошибок. Чтобы исправить это, вам нужно удалить DEFAULT и указать уникальный ключ в инструкции INSERT.

Альтернативы:

  1. Сделать поле числовой и определить столбец с AS IDENTITY.
  2. Сделайте поле числовым и используйте последовательность, чтобы заполнить поле NEXT VALUE FOR sequence-name. в вашем заявлении INSERT.

Я предпочитаю последовательность, поскольку ее легче перезапустить.