2010-02-12 8 views
104

Estoy tratando de hacer una SELECCIONAR usando Oracle. Mi consulta es:SELECCIONAR INTO utilizando Oracle

SELECT * INTO new_table FROM old_table; 

pero me da el siguiente error:

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

Alguna idea de lo que está mal?


el comportamiento estándar de lo anterior debe ser lo más Originalmente pensé: Sin embargo Oracle implementa totalmente diferente en su propio dialecto de SQL Oracle Docs on Insert ... Select

+2

'Select into' para crear una nueva tabla de cuenta no es parte de la norma. El estándar SQL para crear una tabla basada en una selección es 'create table ... as select ...'. En el estándar SQL 'SELECT INTO' se define para leer un valor de columna en una variable en un lenguaje de programación –

Respuesta

222

Si NEW_TABLE ya existe entonces ...

insert into new_table select * from old_table 
/

Si desea crear NEW_TABLE basado en los registros de OLD_TABLE ...

create table new_table as select * from old_table 
/
+13

+1 @Robert: Además, si solo quiere copiar el esquema de old_table, use una cláusula negativa, como por ejemplo: create new_table as select * from old_table DÓNDE 1 = 2. –

26

select into se utiliza en PL/SQL para establecer una variable a los valores de campo. En su lugar, utilice

create table new_table as select * from old_table 
+0

, aunque SELECT INTO era parte del estándar. ¿Oracle hizo algo extraño aquí o nunca fue parte del estándar? –

+3

'select into' es parte de pl/sql. Es un lenguaje para escribir procedimientos almacenados y no tiene relación directa con el estándar sql. Y sí, Oracle hizo muchas cosas que nunca fueron parte del estándar =) – Rorick

+0

@RobertGould: no, 'SELECT INTO' es * no * SQL estándar. La norma solo define 'create table ... as select ...' –

2

Uso:

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

Ejemplo:

create table dept 
as 
select empno, ename from emp; 

Si la tabla ya existe:

insert into new_tablename select columns_list from Existed_table; 
Cuestiones relacionadas