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

Robert Gould
quelle
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).

APC
quelle
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
Wallyk
quelle
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;
PRADEEP R.
quelle