2010-02-12 15 views
104

Sto provando a fare una SELECT INTO usando Oracle. La mia domanda è:SELECT INTO using Oracle

SELECT * INTO new_table FROM old_table; 

ma ottengo il seguente errore:

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

Delle idee che cosa c'è che non va?


il comportamento standard di cui sopra dovrebbe essere come ho inizialmente pensato: Tuttavia Oracle implementata totalmente diverso nel loro dialetto SQL Oracle Docs on Insert ... Select

+2

'selezionare into' per creare una nuova tabella * non * è parte dello standard. Lo standard SQL per creare una tabella in base a una selezione è 'create table .. as select ...'. Nello standard SQL 'SELECT INTO' è definito per leggere un valore di colonna in una variabile in un linguaggio di programmazione –

risposta

222

Se NEW_TABLE esiste già allora ...

insert into new_table select * from old_table 
/

Se si desidera creare NEW_TABLE sulla base delle evidenze in OLD_TABLE ...

create table new_table as select * from old_table 
/
+13

+1 @Robert: Inoltre, se vuoi solo copiare lo schema di old_table, usa una clausola where negativa, come ad esempio: create new_table come select * from old_table DOVE 1 = 2. –

26

select into viene utilizzato in PL/SQL per impostare una variabile per campo valori. Invece, utilizzare

create table new_table as select * from old_table 
+0

I sebbene SELECT INTO era parte dello standard. Oracle faceva qualcosa di strano qui o non faceva mai parte dello standard? –

+3

'select into' è parte di pl/sql. È un linguaggio per scrivere stored procedure e non ha alcuna relazione diretta con lo standard sql. E sì, Oracle ha fatto molte cose che non sono mai state parte dello standard =) – Rorick

+0

@RobertGould: no, 'SELECT INTO' è * non * standard SQL. Lo standard definisce solo 'create table .. come select ..' –

2

Usa:

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

Esempio:

create table dept 
as 
select empno, ename from emp; 

Se la tabella esiste già:

insert into new_tablename select columns_list from Existed_table;