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

Oracle move old columns to new User Defined Type

我的 oracle 数据库中有一个 table,其中有几列用于表示地址字段,例如:城市、街道、州...现在我想使用这样创建的地址 UDT:

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

如何将旧列移动并转换为新列中的这个新对象?

您要求的是在 table 中有一个 table。这样做的方法是定义您的类型,然后将新的 table 定义为如下所示(考虑了 Gordon 的建议,因为这是正确的做法并添加了 N 前缀包括多语言支持):

创建类型:

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

新建Table:

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 );

是否要保留 table 中的旧列,剩下的由您决定。但是,如果您要删除这些列,请清楚地了解 INDEX,FOREIGN KEYs 等依赖项

对于大数据集,更新可能会有点慢。您可以使用此处讨论的一些技巧:Ask TOM