SELEZIONA INTO utilizzando Oracle


134

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

SELECT * INTO new_table FROM old_table;

Ma ottengo il seguente errore:

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

Qualche idea di cosa c'è che non va?


Il comportamento standard di cui sopra dovrebbe essere come pensavo inizialmente: tuttavia Oracle lo ha implementato in modo totalmente diverso nel proprio dialetto di SQL Oracle Docs su Inserisci ... Seleziona


3
select intocreare una nuova tabella non fa parte dello standard. Lo standard SQL per creare una tabella basata su 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
a_horse_with_no_name

Risposte:


282

Se NEW_TABLE esiste già ...

insert into new_table 
select * from old_table
/

Se desideri creare NEW_TABLE in base ai record in OLD_TABLE ...

create table new_table as 
select * from old_table
/

Se lo scopo è creare una tabella nuova ma vuota, utilizzare una clausola WHERE con una condizione che non può mai essere vera:

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

Ricorda che CREATE TABLE ... AS SELECT crea solo una tabella con la stessa proiezione della tabella di origine. La nuova tabella non ha alcun vincolo, trigger o indice che potrebbe avere la tabella originale. Quelli devono ancora essere aggiunti manualmente (se richiesti).


18
+1 @Robert: Inoltre, se vuoi solo copiare lo schema di old_table, usa una clausola where negativa, come ad esempio: crea new_table come seleziona * da old_table DOVE 1 = 2.
KM

31

select intoè usato in pl / sql per impostare una variabile su valori di campo. Invece, usa

create table new_table as select * from old_table

Ho pensato che SELECT INTO facesse parte dello standard. Oracle ha fatto qualcosa di strano qui o non è mai stato parte dello standard?
Robert Gould,

3
select intofa parte di pl / sql. È una lingua per la scrittura di stored procedure e non ha alcuna relazione diretta con lo standard sql. E sì, Oracle ha fatto molte cose che non facevano mai parte dello standard =)
Rorick,

2
@RobertGould: no, nonSELECT INTO è SQL standard. Lo standard definisce solocreate table .. as select ..
a_horse_with_no_name

SCEGLI INTO È parte di SQL standard, vedi w3schools.com/sql/sql_select_into.asp Come molte altre parti di SQL Oracle standard fanno le proprie cose.
Graham Hanson,

2
@grahamhanson che sembra essere un collegamento al sito tutorial W3Schools, non un documento sugli standard ANSI.
William Robertson,

3

Uso:

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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.