ВИБІРІТЬ В ІНТО, використовуючи Oracle


134

Я намагаюся зробити SELECT INTO за допомогою Oracle. Мій запит:

SELECT * INTO new_table FROM old_table;

Але я отримую таку помилку:

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

Будь-які ідеї, що не так?


Стандартна поведінка вищезазначеного має бути такою, якою я спочатку вважав: Однак Oracle реалізував це зовсім по-іншому у своєму діалекті Документів SQL Oracle на Insert ... Select


3
select intoстворення нової таблиці не є частиною стандарту. Стандарт SQL для створення таблиці на основі вибору є create table .. as select .... У стандарті SQL SELECT INTOвизначено читання значення стовпця в змінній мовою програмування
a_horse_with_no_name

Відповіді:


282

Якщо 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, використовуйте мінус, де застереження, як, наприклад: створити new_table як select * з 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входить до пл / кв. Це мова для написання збережених процедур і не має прямого відношення до стандарту 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.