2015-07-15 4 views
0

Когда я запустил запрос alter, я получаю сообщение об ошибке, чтобы разрешить изменение столбца.Как изменить тип данных столбца из varchar2 на номер в базе данных Oracle

Table : Monthly_Result (Id Number(38,0), dealer_ID varchar2, sales_revenue Number(38,2)) 

dealer_Id должен быть изменен на номер (38,0)

Пожалуйста, помогите

+0

Если у него есть данные, вы должны удалить его, чтобы сделать это изменение с помощью 'alter' - что вы, по-видимому, не хотите делать? Это то, что сообщение говорит вам. Вам нужно будет добавить новый столбец, скопировать/преобразовать данные, удалить старый столбец и переименовать новый. Внимательно. И это предполагает, что все данные * будут * конвертировать чисто, должно ли это изменение быть сделано онлайн? –

ответ

2

Как Алекс отметил в своем комментарии вам нужно будет добавить новый столбец; обновить его и проверить правильность преобразований; затем отпустите старый столбец, когда будете готовы.

-- step 1 
alter table monthly_result add tmp number(38, 0); 
update monthly_result set tmp = to_number(dealer_id); 

-- step 2 
-- check values are set correctly in tmp 

-- step 3 
alter table monthly_result rename column dealer_id to dealer_id_old; 
alter table monthly_result rename column tmp to dealer_id; 

-- step 4 
alter table monthly_result drop column dealer_id_old; 
+0

Почему вы не принимаете этот ответ? я что-то пропустил? – Richard

+0

Спасибо Алекс и Ричард – user1564657

0

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

--copy ДАННЫЕ ДЛЯ ВРЕМЕННОЙ ТАБЛИЦЫ CREATE TABLE _TMP AS SELECT * ИЗ ;

- СТРУЙНЫЕ СВЕДЕНИЯ TRUNCATE TABLE;

--ALTER СПЕЦИФИЧЕСКИЙ ТИП КОЛОННЫ изменить таблицу ИЗМЕНИТЬ номер (38, 0);

- ИЗОБРАЖЕНИЕ ДАННЫХ, КОТОРЫЕ КОТОРЫЕ ПРЕДЫДУЩАЯ ВРЕМЕННАЯ ТАБЛИЦА ВСТАВИТЬ В ВЫБОР * ОТ _TMP;

--ЧИКОВЫЕ ВАШИ ДАННЫЕ SELECT * FROM;

- УКАЗАТЬ ВАШ ВРЕМЕННЫЙ ТАБЛИЦ ТАБЛИЦА DROP _TMP;

Я считаю, что это сработает для вас.