DB2 нужна помощь для изменения типа данных набора таблиц - PullRequest
6 голосов
/ 26 октября 2011

Мне нужно изменить тип данных столбца с VARCHAR на DECIMAL

У меня есть данные в столбце, но все они имеют числовые значения, такие как 10.00, 25.50 и т. Д.,

Теперь, когда я делаю alter table MY_TABLE alter column COL1 set data type to decimal(11,2), это терпит неудачу.

Какой процесс я могу выполнить здесь.

Я уверен, что это не новый вопрос, но я не смог найти решение, поэтому вместо того, чтобы ломать себе голову, я спрашиваю здесь.

Ответы [ 4 ]

4 голосов
/ 26 октября 2011

Синтаксис ALTER TABLE {tableName} MODIFY {Column-Name} {New-Column-Definition} IE ALTER TABLE MY_TABLE MODIFY COL1 DECIMAL(11,2)

Обычно это (изменение типа данных столбца) не преобразует существующие данные в новый тип и, вероятно, установитнесовместимые значения как NULL (или это может сделать интеллектуальное преобразование, это в значительной степени зависит от сервера СУБД)

Вы можете сделать что-то подобное, если объем данных не слишком велик

ALTER TABLE MY_TABLE ADD COLUMN Temporary decimal(11,2);
UPDATE MY_TABLE SET Temporary=CAST(COL1 AS DECIMAL(11,2));
ALTER TABLE MY_TABLE DROP COLUMN COL1;
ALTER TABLE MY_TABLE  CHANGE Temporary COL1 decimal(11,2);

РедактироватьПервая часть, вероятно, неверна

0 голосов
/ 27 апреля 2017

Я пробовал решение @apokryfos, оно отлично работает!Это не завершено, однако некоторые команды SQL завершаются с ошибкой SQLCODE: -668, SQLSTATE: 57016

Пример:

SELECT count(COLUMN) FROM SCHEMA.TABLE_NAME WHERE id = ID_NUMBER FETCH FIRST 1 ROWS ONLY

Это будетfail!

Чтобы решить эту проблему, вам необходимо переустановить таблицу.Откройте оболочку DB2 и введите следующие команды:

db2 connect to <your database name here>
db2 REORG TABLE SCHEMA.TABLE_NAME

Существует также команда SQL для REORG, хотя я ее не пробовал:

CALL SYSPROC.ADMIN_CMD('REORG TABLE SCHEMA.TABLENAME');

Ссылка: Ошибка таблицы обновления в db2 с SQLCODE: -668, SQLSTATE: 57016, SQLERRMC: 7;

0 голосов
/ 26 ноября 2013

Попробуйте сбросить системные таблицы в схеме «SYSTOOLS». Затем попробуйте изменить его снова.

0 голосов
/ 26 октября 2011

Я предполагаю, что DB2 не позволит вам предоставить руководство по преобразованию данных, но я молюсь богам SQL Server.

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

  • ALTER TABLE MY_TABLE ADD col1_new decimal(11,2) NULL

  • UPDATE MY_TABLE SET col1_new = CAST(col1 AS decimal(11,2)

  • Проверка количества различных значений, нулей и т. Д. Между col1 и col1_new с учетом 10.00, 10.0 и 10 будут разными значениями в varchar и одним значением в decimal.Не похоже, что это проблема ваших данных, но что-то нужно искать, если счет отличается

  • ALTER TABLE MY_TABLE DROP COLUMN col1

  • У меня естьне знаю, что такое эквивалент db2 sp_rename

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