Нет, вы не можете этого сделать; ваше второе утверждение (слегка исправленное) получит
ORA-02440: Create as select with referential constraints not allowed
02440. 00000 - "Create as select with referential constraints not allowed"
*Cause: create table foo (... ref. con. ...) as select ...;
*Action: Create the table as select, then alter the table to add the
constraints afterwards.
Это упомянуто в документации :
Ограничения на определяющий запрос таблицы
На запрос таблицы распространяются следующие ограничения:
Количество столбцов в таблице должно равняться количеству выражений в подзапросе.
Определения столбцов могут указывать только имена столбцов, значения по умолчанию и ограничения целостности, а не типы данных.
Вы не можете определить ограничение внешнего ключа в операторе CREATE TABLE
, который содержит AS subquery
, если таблица не разделена на ссылки, а ограничение не является ссылочным ограничением на разделение таблицы. Во всех остальных случаях необходимо создать таблицу без ограничения, а затем добавить ее позже с помощью оператора ALTER TABLE
.
Могут быть предоставлены другие ограничения, как в ответе @Jeff, связанном с комментарием, чтобы вы могли добавить первичный ключ:
CREATE table copy_emp(eid primary key, ename,job,mid,sal,dept_id)
as
SELECT employee_id,
concat(first_name,last_name),job_id,manager_id,salary,department_id
FROM employees;
или (если имя ограничения уникально)
CREATE table copy_emp(eid, ename,job,mid,sal,dept_id,
constraint emp_pk primary key (eid))
as
SELECT employee_id,
concat(first_name,last_name),job_id,manager_id,salary,department_id
FROM employees;