更改列的数据类型

时间:2019-07-07 16:17:55

标签: sql oracle ddl user-defined-types

在此问题的上一部分中,我必须创建PHONE_LIST_TYPE varray(3)。

A。使用属性COUNTRY_CODE,AREA_CODE和PHONE_NUMBER定义一个名为phone_type的用户定义对象类型数据类型。

B。将名为Phone_List_type的用户定义的VARRAY数据类型定义为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 column部分下有一个语法错误行,我不知道如何解决此错误。

2 个答案:

答案 0 :(得分:1)

假设以前有:

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:无效的数据类型更改错误。因为不可能以经典方式将基本类型(string,numeric ...)的列转换为复合列(如那样,在这种情况下,也就是数据类型的列)将被转换为空)。

因此,添加一个具有临时名称的新列:

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;

答案 1 :(得分:0)

取决于您使用的数据库。这是最常见的:

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;