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


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).


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

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;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.