SELECT INTO mit Oracle


134

Ich versuche mit Oracle ein SELECT INTO durchzuführen. Meine Anfrage lautet:

SELECT * INTO new_table FROM old_table;

Aber ich bekomme folgenden Fehler:

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

Irgendwelche Ideen, was ist los?


Das Standardverhalten des oben genannten sollte so sein, wie ich es ursprünglich gedacht hatte: Oracle hat es jedoch in seinem eigenen Dialekt von SQL Oracle Docs on Insert ... Select völlig anders implementiert


3
select intoDas Erstellen einer neuen Tabelle gehört nicht zum Standard. Der SQL-Standard zum Erstellen einer Tabelle basierend auf einer Auswahl lautet create table .. as select .... Im SQL-Standard SELECT INTOist definiert, einen Spaltenwert in eine Variable in einer Programmiersprache
einzulesen

Antworten:


282

Wenn NEW_TABLE bereits existiert, dann ...

insert into new_table 
select * from old_table
/

Wenn Sie NEW_TABLE basierend auf den Datensätzen in OLD_TABLE erstellen möchten ...

create table new_table as 
select * from old_table
/

Wenn der Zweck darin besteht, eine neue, aber leere Tabelle zu erstellen, verwenden Sie eine WHERE-Klausel mit einer Bedingung, die niemals wahr sein kann:

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

Denken Sie daran, dass CREATE TABLE ... AS SELECT nur eine Tabelle mit derselben Projektion wie die Quelltabelle erstellt. Die neue Tabelle enthält keine Einschränkungen, Trigger oder Indizes, die die ursprüngliche Tabelle möglicherweise hat. Diese müssen noch manuell hinzugefügt werden (falls erforderlich).


18
+1 @Robert: Wenn Sie nur das Schema von old_table kopieren möchten, verwenden Sie eine negative where-Klausel, wie zum Beispiel: create new_table als select * from old_table WHERE 1 = 2.
KMån

31

select intowird in pl / sql verwendet, um eine Variable auf Feldwerte zu setzen. Verwenden Sie stattdessen

create table new_table as select * from old_table

Ich dachte, SELECT INTO war Teil des Standards. Hat Oracle hier etwas Seltsames getan oder war es nie Teil des Standards?
Robert Gould

3
select intoist Teil von pl / sql. Es ist eine Sprache zum Schreiben gespeicherter Prozeduren und hat keine direkte Beziehung zum SQL-Standard. Und ja, Oracle hat viele Dinge gemacht, die nie Teil des Standards waren =)
Rorick

2
@ RobertGould: Nein, SELECT INTO ist kein Standard-SQL. Der Standard definiert nurcreate table .. as select ..
a_horse_with_no_name

SELECT INTO ist Teil von Standard-SQL, siehe w3schools.com/sql/sql_select_into.asp Wie viele andere Teile von Standard-SQL macht Oracle seine eigene Sache.
Graham Hanson

2
@grahamhanson, das anscheinend ein Link zur W3Schools-Tutorial-Site ist, kein ANSI-Standarddokument.
William Robertson

3

Verwenden:

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

Beispiel:

create table dept
as
select empno, ename from emp;

Wenn die Tabelle bereits vorhanden ist:

insert into new_tablename select columns_list from Existed_table;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.