2010-02-12 1 views
104

Я пытаюсь сделать SELECT INTO с помощью Oracle. Мой запрос:SELECT INTO using Oracle

SELECT * INTO new_table FROM old_table; 

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

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

Любые идеи, что не так?


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

+2

'выбрать into' создать новую таблицу * не * часть стандарта. Стандартом SQL для создания таблицы на основе select является 'create table .. as select ...'. В стандарте SQL «SELECT INTO» определено для чтения значения столбца в переменной на языке программирования –

ответ

222

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

insert into new_table select * from old_table 
/

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

create table new_table as select * from old_table 
/
+13

+1 @Robert: Кроме того, если вы просто хотите скопировать схему old_table, используйте предложение neg where where, например: create new_table as select * from old_table ГДЕ 1 = 2. –

26

select into используется в PL/SQL, чтобы установить переменную к значениям полей. Вместо этого используйте

create table new_table as select * from old_table 
+0

Я, хотя SELECT INTO был частью Стандарта. Был ли Oracle что-то странное здесь или он никогда не был частью стандарта? –

+3

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

+0

@RobertGould: no, 'SELECT INTO' is * not * standard SQL. Стандарт определяет только 'create table .. as select ..' –

2

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

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;