Как переименовать столбец, который является индексом? - PullRequest
1 голос
/ 05 марта 2019

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

ALTER TABLE <name> RENAME column <id> TO <newid>;

Error: SQL0478N DROP, ALTER, TRANSFER OWNERSHIP...

Ответы [ 2 ]

2 голосов
/ 05 марта 2019

В командной строке оболочки вы можете использовать db2 "? SQL0478N" | more, чтобы увидеть подробности ошибки и некоторые предложения.

Ошибка говорит вам, что объект, который вы хотите изменить, имеет зависимые объекты, поэтому доВы обрабатываете зависимости, которые не можете выполнить действие alter.

Вы можете выбрать между выполнением управления зависимостями вручную или использовать хранимую процедуру, чтобы сделать это за вас.

Если вы хотите это сделатьвручную вы должны найти зависимые объекты, удалить их, переименовать столбцы и затем воссоздать зависимости.Могут быть и другие зависимые объекты, а не только индекс, например пакеты.Если ваш Db2-сервер работает в Linux / Unix / Windows, вы можете использовать хранимую процедуру DBMS_UTILITY.GET_DEPENDENCY или запросить каталог вручную.Это зависит от того, что вам проще.

Воссоздание зависимостей может быть инвазивным, и если существуют объекты статического SQL, которые ссылаются на соответствующие индексы, их необходимо будет восстановить.Для производственного использования это может повлечь за собой перерыв в обслуживании, который вы хотите избежать.

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

Если вы хотите попробовать автоматизацию, и если ваш Db2-сервер работает в Linux / Unix / Windows, тогда вы можетеиспользуйте хранимую процедуру SYSPROC.ALTOBJ - однако существует кривая обучения, которая подходит не для всех эволюций схемы.

0 голосов
/ 06 марта 2019

Решение:

drop index
alter table
create index
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...