изменение типа данных столбца - PullRequest
1 голос
/ 07 июля 2019

В предыдущей части этой проблемы мне нужно было создать переменную PHONE_LIST_TYPE (3).

A. Определите определяемый пользователем тип данных типа объекта с именем phone_type с атрибутами COUNTRY_CODE, AREA_CODE и PHONE_NUMBER.

B. Определите пользовательский тип данных VARRAY с именем Phone_List_type в виде массива третьего размера типа phone_type.

CREATE OR REPLACE TYPE phone_list_type AS VARRAY(3) of PHONE_TYPE

c. Модифицируйте таблицу STUDENT1 так, чтобы атрибут PHONE имел тип данных Phone_List_type.

ALTER TABLE student1
ALTER COLUMN phone phone_list_type not null;

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

Ответы [ 2 ]

1 голос
/ 07 июля 2019

Предполагая, что ранее у вас есть:

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;
0 голосов
/ 07 июля 2019

Зависит от того, какую базу данных вы используете. Вот самые распространенные из них:

SQL Server / MS Access:

ALTER TABLE student1
ALTER COLUMN phone phone_list_type NOT NULL;

Мой SQL / Oracle (до версии 10G):

ALTER TABLE student1
MODIFY COLUMN phone phone_list_type NOT NULL;

Oracle 10G и более поздние версии:

ALTER TABLE student1
MODIFY phone phone_list_type NOT NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...