ВЫБРАТЬ В с помощью Oracle


135

Я пытаюсь сделать ВЫБРАТЬ В, используя Oracle. Мой запрос:

SELECT * INTO new_table FROM old_table;

Но я получаю следующую ошибку:

SQL Error: ORA-00905: missing keyword
00905. 00000 -  "missing keyword"

Есть идеи что не так?


Стандартное поведение вышеизложенного должно быть таким, как я изначально думал: однако Oracle реализовал его совершенно иначе на своем собственном диалекте SQL Oracle Docs on Insert ... Выбрать


3
select intoсоздание новой таблицы не входит в стандарт. Стандарт SQL для создания таблицы на основе выбора - это create table .. as select .... В стандарте SQL SELECT INTOопределено чтение значения столбца в переменную на языке программирования
a_horse_with_no_name

Ответы:


283

Если NEW_TABLE уже существует, то ...

insert into new_table 
select * from old_table
/

Если вы хотите создать NEW_TABLE на основе записей в OLD_TABLE ...

create table new_table as 
select * from old_table
/

Если целью является создание новой, но пустой таблицы, используйте предложение WHERE с условием, которое никогда не может быть истинным:

create table new_table as 
select * from old_table
where 1 = 2
/

Помните, что CREATE TABLE ... AS SELECT создает только таблицу с той же проекцией, что и исходная таблица. Новая таблица не имеет ограничений, триггеров или индексов, которые могли бы иметь исходная таблица. Их еще нужно добавить вручную (если они требуются).


18
+1 @Robert: Плюс, если вы просто хотите скопировать схему old_table, используйте отрицательное предложение where, например: create new_table как select * from old_table WHERE 1 = 2.
KMån

31

select intoиспользуется в pl / sql для установки переменной в значения поля. Вместо этого используйте

create table new_table as select * from old_table

Я думал, что SELECT INTO был частью Стандарта. Сделал ли Oracle здесь что-то странное или это никогда не было частью стандарта?
Роберт Гулд,

3
select intoявляется частью pl / sql. Это язык для написания хранимых процедур и не имеет прямого отношения к стандарту sql. И да, Oracle сделала много вещей, которые никогда не входили в стандарт =)
Рорик

2
@RobertGould: нет, SELECT INTO это не стандартный SQL. Стандарт определяет толькоcreate table .. as select ..
a_horse_with_no_name

SELECT INTO IS - часть стандартного SQL, см. W3schools.com/sql/sql_select_into.asp. Как и многие другие части стандартного SQL, Oracle выполняет свои собственные функции.
Грэм Хансон

2
@grahamhanson, который, похоже, является ссылкой на сайт учебника W3Schools, а не документ стандартов ANSI.
Уильям Робертсон

3

Использование:

create table new_table_name 
as
select column_name,[more columns] from Existed_table;

Пример:

create table dept
as
select empno, ename from emp;

Если таблица уже существует:

insert into new_tablename select columns_list from Existed_table;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.