Предполагая, что ранее у вас есть:
CREATE TYPE PHONE_TYPE AS OBJECT ( COUNTRY_CODE int,
AREA_CODE int,
PHONE_NUMBER varchar2(15) );
CREATE TABLE student1( id int, phone varchar2(15) );
Чтобы иметь возможность изменить тип данных, вам обычно требуется синтаксис:
ALTER TABLE student1
MODIFY ( phone phone_type );
Но в этом случае вы получите ORA-22858: неверное изменение типа данных ошибка. Поскольку невозможно преобразовать столбец с базовым типом (строка, числовой ...) в составной классическим способом, как, например, между ними (, кстати, также в этом случае, столбец с типом данных будет преобразован должен быть пустым ).
Итак, добавьте новый столбец с временным именем:
ALTER TABLE student1 ADD (phone2 phone_type);
И, заполните phone_number
компонент этого нового столбца существующими данными:
UPDATE student1 s
SET s.phone2.phone_number = phone;
Наконец, перетащите и переименуйте существующее имя столбца:
ALTER TABLE student1 DROP COLUMN phone;
ALTER TABLE student1 RENAME COLUMN phone2 TO phone;