2014-10-22 1 views
2

я создал таблицу с помощью select с union, следующим образом:создать таблицу выбора объединение не имеет ограничений

create table tableC as 
select column1, column2 from tableA 
union all 
select column1, column2 from tableB 

Результирующая таблица (tableC) не унаследовал ни одно из ограничений из tableA или tableB. Почему не скопированы ограничения на новую таблицу?

+0

Чтобы ответить на ваш вопрос без маски: вместо этого вы можете создать таблицу tableC как select column1, column2 из tableA', которая будет дублировать любые ограничения NOT NULL, а затем последует за вставкой из tableB. –

ответ

2

Использование select ... as ... для создания таблицы never копии ограничений. Если вы хотите, чтобы новая таблица наследовала ограничения из исходных таблиц, вы должны создать новые ограничения вручную.


В @Davek указывает, not null ограничения будут скопированы из одной таблицы select ... as .... Я думаю, это потому, что они оба атрибуты столбца и ограничения. Однако, как только столбец имеет более одного источника, разумно, что Oracle не попытается применить это ограничение.


В ответ на последующий вопрос о «не было бы возможным дать tableC те же ограничения, либо из tableA или tableB после СТА?»:

Конечно, это возможно, но там нет одна команда для этого. Вы можете написать процедуру, использующую динамический SQL для копирования ограничений. Однако, если вы не пытаетесь автоматизировать это поведение, обычно проще извлечь DDL с помощью среды IDE и изменить имя таблицы.

+2

Я думаю, что ограничения NOT NULL будут созданы, если будет указана только одна таблица .... но это о ней. Все остальное будет создано вручную/независимо. – davek

+0

было бы возможно, чтобы дать tabelC те же ограничения, что и tableA или TableB, после ctas? – user

 Смежные вопросы

  • Нет связанных вопросов^_^