在此问题的上一部分中,我必须创建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部分下有一个语法错误行,我不知道如何解决此错误。
答案 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;