Oracle将旧列移至新的用户定义的类型



我的Oracle数据库中有一个表格,上面有几列,用于表示地址字段,例如:City,City,Street,State ...现在我想使用像这样创建的地址UDT:

CREATE TYPE ADDRESS AS OBJECT
( 
state NUMBER(6),
street CHAR(50),
city CHAR(50),
)

如何在新列中移动并将旧列转换为此新对象?

您要的是在表中有一个表。这样做的方法是定义您的类型,然后将新表定义为类似的内容(请考虑到戈登的建议,因为这是正确的方法,并添加了N前缀以包括多语言支持(:

创建类型

CREATE TYPE FULL_ADDRESS_T AS OBJECT
 ( state  NUMBER(6)     ,
   street NVARCHAR2(50) ,
   city   NVARCHAR2(50)   ) ;

创建新表格

CREATE TABLE MY_TABLE AS 
 ( First_Name   NVARCHAR2(32)   ,
   Mid_Name     NVARCHAR2(32)   ,
   Last_Name    NVARCHAR2(32)   ,
   Address      FULL_ADDRESS_T    ) ;

请注意,这将使您更复杂地操纵。

创建TYPE

CREATE TYPE ADDRESS_TYP AS OBJECT
( 
state NUMBER(6),
street VARCHAR2(50),
city VARCHAR2(50)
);

ADD TABLE

的对象类型列
ALTER TABLE YOURTABLE ADD ( ADDRESS ADDRESS_TYP );

从列中的现有值中更新新的ADDRESS列。

UPDATE YOURTABLE SET  ADDRESS = ADDRESS_TYP( state,street,city );

是否要将旧列保留在表中,其余的将留给您。但是,如果您放下这些列,请清楚地知道诸如INDEX,FOREIGN KEY s等的依赖项

对于大型数据集,更新可能有点慢。您可以在此处讨论的一些技术:询问Tom

最新更新