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 KEY
s 等依赖项
对于大数据集,更新可能会有点慢。您可以使用此处讨论的一些技巧:Ask TOM
我的 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 KEY
s 等依赖项
对于大数据集,更新可能会有点慢。您可以使用此处讨论的一些技巧:Ask TOM