Db2 Отключить ограничение, если выход - PullRequest
0 голосов
/ 30 октября 2018

Как я могу удалить уникальное ограничение в таблице, которая уже была создана после проверки, существует ли она или нет? Мне нужно сделать это с помощью одного оператора или даже с помощью хранимой процедуры.

1 Ответ

0 голосов
/ 30 октября 2018

Существуют разные подходы, в зависимости от деталей.

Один из тривиальных подходов подходит только в том случае, если вы уже знаете точное имя ограничения и имя таблицы-схемы + имя таблицы, - это удаление ограничения при игнорировании ошибки, если она не существует (см. Пример ниже).

Пример удаления уникального ограничения с использованием составного SQL, который игнорирует случай, когда ограничение еще не существует. Вы можете определить другие условия, чтобы игнорировать. Этот составной SQL может быть выполнен непосредственно в CLP или может быть реплицирован внутри хранимой процедуры.

--#SET TERMINATOR @

begin
   declare v_no_such_constraint integer default 0;
   declare not_exists condition for sqlstate '42704';
   declare continue handler for not_exists set v_no_such_constraint=1;
   execute immediate('alter table user1.mytable drop constraint myuniqueconstraint') ;
end@

Примечание: так как это изменение таблицы, ваш код должен проверить, переводит ли изменение в таблицу в ожидание перерегистрации, а затем реагировать соответствующим образом. Кроме того, это предполагает, что у вас также есть инструментальные средства, которые будут повторно проверять любые объекты (например, пакеты), которые становятся недействительными в результате удаления этого ограничения.

Если вы не знаете имя ограничения, а только имя таблицы и тип ограничения (например, столбцы, на которые влияют), тогда вы можете искать в представлениях каталога, объединяя syscat.tables, syscat.tabconst, syscat.checks и другие представления. Подробнее см. Центр знаний для вашей версии Db2.

...