2016-12-05 5 views
-2

Я пытаюсь добавить ограничение к базе данных DB2, которая проверит три столбца. Я использую таблицу, которая представляет собой таблицу счетов-фактур, которая включает в себя начальную дату конечной даты, цену количества штук и т. Д. Для каждой позиции в счете-фактуре. Я хочу, чтобы исключить дату начала и окончания от нуля, когда столбец linestatus = RELELASED. Вот заявление alter, которое у меня есть до сих пор. Мой вопрос: почему это не будет работать? Я проверил, что в этой таблице нет текущих экземпляров всех трех этих проверок.Проверить ограничение, которое ссылается на несколько столбцов в одной таблице

alter table pluspgbtrans 
add constraint start_end_notnull 
Check (eip_linestatus = 'RELEASED' AND eip_endate is not null AND eip_startdate is not null) 
+2

какая ошибка возвращается? Какая платформа и верификация DB2? – Charles

+0

10.5 DB2 - это версия и ошибка isDB2 SQL Ошибка: SQLCODE = -544, SQLSTATE = 23512, SQLERRMC = START_END_NOTNULL, DRIVER = 4.16.53 [SQL State: 23512] –

+1

Эта ошибка указывает, что существующая строка не встречается ограничение. – Charles

ответ

0

Ваш оператор SQL действителен.

Однако в вашей логике есть ошибка: эта проверка не применяется только если eip_linestatus = 'RELEASED'.

Как указано, ваше ограничение утверждает, что все строки должны иметь eip_linestatus = 'RELEASED' AND eip_endate is not null AND eip_startdate is not null.

Итак, если какие-либо строки в таблице имеют eip_linestatus со значением чего-либо иного, кроме RELEASED, вы получите ошибку SQL0544N при попытке добавить ограничение.

Чтобы создать ограничение, которое вы ищете, вам необходимо обработать другие состояния (состояния) для eip_linestatus. Я не могу догадаться, что это такое, так что вот потенциальный общий вариант:

alter table pluspgbtrans 
    add constraint start_end_notnull check (
     (eip_linestatus <> 'RELEASED') 
     OR 
     (
      eip_linestatus = 'RELEASED' 
      AND eip_endate is not null 
      AND eip_startdate is not null 
     ) 
    ); 

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

  • Нет связанных вопросов^_^