我的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