2010-03-05 3 views
17

Я пытаюсь изменить тип данных для столбца db derby. Текущий столбец цены устанавливается как DECIMAL (5,0). Я хотел бы изменить его на DECIMAL (7,2). Я сделал это:Как изменить тип данных столбца для базы данных derby?

alter table item alter column price set data type DECIMAL(7,2); 

Но это не сработало, и показывает ошибку:

Error: Only columns of type VARCHAR may have their length altered. 

Могу ли я знать, как это возможно, чтобы изменить его? Спасибо.

ответ

24

Вот скрипт Derby SQL, чтобы изменить столбец MY_TABLE.MY_COLUMN из BLOB (255) в BLOB (2147483647):

ALTER TABLE MY_TABLE ADD COLUMN NEW_COLUMN BLOB(2147483647); 
UPDATE MY_TABLE SET NEW_COLUMN=MY_COLUMN; 
ALTER TABLE MY_TABLE DROP COLUMN MY_COLUMN; 
RENAME COLUMN MY_TABLE.NEW_COLUMN TO MY_COLUMN; 
-3

Posgtes Решение:

ALTER TABLE prices_table ALTER price_column TYPE десятичное (7,2)

+1

Я думаю, что Дерби не поддерживает TYPE, то появится сообщение об ошибке, ошибка синтаксиса: Обнаружен «TYPE» в строке 1, столбец 30. –

3

Вот несколько более сложный способ, чтобы изменить тип данных столбца в этой моде:

  1. Add новый столбец желаемого типа данных
  2. Проблема «update ... set new-column = old-column для копирования данных из старого столбца в новый столбец
  3. капля старой колонки
  4. Переименуйте новый столбец, чтобы иметь имя старого столбца.

Немного больше шагов, но в итоге эффект будет таким же.

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

1

Я думаю, что вы можете сделать так:

ALTER TABLE SCHEMA.TABLE ALTER "COLUMN-NAME" SET DATA TYPE VARCHAR(255); 

(column-Name SET DATA TYPE VARCHAR(integer)) для строки типа данных в качестве примера ...

+0

Загвоздка в том, что вы можете делайте это только в том случае, если существующий тип достаточно схож. Например, если это уже VARCHAR (128), вы можете изменить его на VARCHAR (255). Но если это INTEGER, вы не можете изменить его на BIGINT, хотя это интуитивно кажется, что это должно быть возможно. – Trejkaz

+0

Это отлично работало для увеличения размера столбца varchar и партии проще, чем принятое решение. – oneworld

1

Вы можете изменить таблицу следующим образом:

ALTER TABLE [table] ALTER COLUMN [column] SET DATA TYPE [type]; 

Или в Rails, просто используйте:

change_column :table_name, :column_name, :integer 
Смежные вопросы