WYBIERZ INTO przy użyciu Oracle

140

Próbuję zrobić SELECT INTO przy użyciu Oracle. Moje zapytanie to:

SELECT * INTO new_table FROM old_table;

Ale pojawia się następujący błąd:

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

Jakieś pomysły, co jest nie tak?


Standardowe zachowanie powyższego powinno być takie, jak początkowo sądziłem: jednak Oracle zaimplementowało to zupełnie inaczej w swoim własnym dialekcie SQL Oracle Docs on Insert ... Wybierz

Robert Gould
źródło
3
select intotworzenie nowej tabeli nie jest częścią normy. Standardem SQL do tworzenia tabeli na podstawie selekcji jest create table .. as select .... W standardzie SQL SELECT INTOzdefiniowano wczytanie wartości kolumny do zmiennej w języku programowania
a_horse_with_no_name

Odpowiedzi:

289

Jeśli NEW_TABLE już istnieje, to ...

insert into new_table 
select * from old_table
/

Jeśli chcesz utworzyć NEW_TABLE na podstawie rekordów w OLD_TABLE ...

create table new_table as 
select * from old_table
/

Jeśli celem jest utworzenie nowej, ale pustej tabeli, użyj klauzuli WHERE z warunkiem, który nigdy nie może być prawdziwy:

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

Pamiętaj, że CREATE TABLE ... AS SELECT tworzy tylko tabelę z taką samą projekcją, jak tabela źródłowa. Nowa tabela nie ma żadnych ograniczeń, wyzwalaczy ani indeksów, które mogłaby mieć oryginalna tabela. Te nadal trzeba dodać ręcznie (jeśli są wymagane).

APC
źródło
18
+1 @Robert: Plus, jeśli chcesz tylko skopiować schemat starej_tabeli, użyj negatywnej klauzuli gdzie, na przykład: utwórz nową_tabelę jako select * from old_table WHERE 1 = 2.
KMån
32

select intojest używany w pl / sql do ustawiania zmiennej na wartości pól. Zamiast tego użyj

create table new_table as select * from old_table
wallyk
źródło
Myślałem, że SELECT INTO jest częścią standardu. Czy Oracle zrobiło tutaj coś dziwnego, czy też nigdy nie było to częścią standardu?
Robert Gould,
3
select intojest częścią pl / sql. Jest to język do pisania procedur składowanych i nie ma bezpośredniego związku ze standardem sql. I tak, Oracle zrobiło wiele rzeczy, które nigdy nie były częścią standardu =)
Rorick,
2
@RobertGould: nie, SELECT INTO to nie jest standardowy SQL. Standard definiuje tylkocreate table .. as select ..
a_horse_with_no_name
SELECT INTO IS jest częścią standardowego SQL, patrz w3schools.com/sql/sql_select_into.asp Podobnie jak wiele innych części standardowego SQL Oracle robi swoje.
graham hanson
2
@grahamhanson, który wydaje się być linkiem do strony z samouczkami W3Schools, a nie dokumentem standardów ANSI.
William Robertson,
4

Posługiwać się:

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

Przykład:

create table dept
as
select empno, ename from emp;

Jeśli tabela już istnieje:

insert into new_tablename select columns_list from Existed_table;
PRADEEP R
źródło