Как вставить данные в другую таблицу с преобразованием типа данных одного из столбцов?

Есть таблица, нужно сделать её копию, но изменить тип данных одного столбца:

  • id(id) - name(varchar2) - phone(varchar2)

Нужно:

  • id(id) - name(varchar2) - phone(number)

Нужно сохранить данные при копировании. В колонке phone данные записаны в таком формате - 34252345.

Знаю о такой возможности внесения данных:

insert into new_table
select * from old_table

Но как при этом преобразовать тип данных?


В таблице более 3 миллионов записей, так что выгрузить её и залить в новую будет проблематично.


Ответы (1 шт):

Автор решения: 0xdb

Символьные данные будут неявно преобразованы в числовые. Так как колонка phone содержит только целочисленные значения, то каких либо проблем неявное преобразование не вызовет.

create table t1 (id, name, phone) as
    select 1, 'name', '34252345' from dual;

create table t2 (id int, name varchar2(8), phone number);

insert into t2
    select * from t1;

1 row inserted.

select * from t2;

        ID NAME          PHONE
---------- -------- ----------
         1 name       34252345

Заметка об ограничении ответственности:
Телефонные номера правильно хранить в колонках с символьным типом данных. Попытка преобразовать их в числовой тип данных являетсся ошибкой дизайна БД, которая может привести к потере данных.

→ Ссылка