Oracle перемещает старые столбцы в новый пользовательский тип - PullRequest
0 голосов
/ 29 апреля 2018

В моей базе данных oracle есть таблица с несколькими столбцами для представления полей адреса, таких как: город, улица, штат ... теперь я хочу использовать UDT адреса, созданный так:

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

Как я могу переместить и преобразовать старые столбцы в этот новый объект в новом столбце?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Создать 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

0 голосов
/ 29 апреля 2018

То, что вы просите, это иметь стол в таблице. Способ сделать это состоит в том, чтобы определить ваш тип, а затем определить новую таблицу как что-то вроде следующего (принял во внимание предложение Гордона, поскольку это правильный способ сделать это, и добавил префикс 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    ) ;

Обратите внимание, что это усложнит вам управление.

...