我的oracle数据库中有一个表,其中有几列用于表示地址字段,例如:city,street,state ...现在我想使用这样创建的地址UDT:
CREATE TYPE ADDRESS AS OBJECT
(
state NUMBER(6),
street CHAR(50),
city CHAR(50),
)
如何在新列中移动旧列并将其转换为此新对象?
答案 0 :(得分:2)
你要求的是在表格中有一张桌子。这样做的方法是定义你的类型,然后将你的新表定义为如下所示(将Gordon的建议考虑在内,因为这是正确的方法,并添加了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 ) ;
请注意,这会使操作变得更加复杂。
答案 1 :(得分:1)
创建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
等依赖项。
对于大型数据集,更新可能有点慢。您可以使用此处讨论的一些技巧:Ask TOM