una palabra ora missing into falta espaƱol error clave sql oracle ora-00905

sql - palabra - ora 00905 missing keyword select into



Error de Oracle: ORA-00905: palabra clave que falta (5)

Excavar la línea de SQL:

SELECT * INTO assignment_20081120 FROM assignment ;

contra una base de datos en Oracle para hacer una copia de seguridad de una tabla llamada asignación, me da el siguiente error ORACLE: ORA-00905: palabra clave que falta


A menos que haya una sola fila en la tabla ASSIGNMENT y ASSIGNMENT_20081120 es una variable PL / SQL local de tipo ASSIGNMENT%ROWTYPE , esto no es lo que desea.

Suponiendo que está tratando de crear una nueva tabla y copiar los datos existentes a esa nueva tabla

CREATE TABLE assignment_20081120 AS SELECT * FROM assignment


Primero, pensé:

"... En Microsoft SQL Server, SELECT...INTO crea automáticamente la nueva tabla, mientras que Oracle parece requerir que usted la cree manualmente antes de ejecutar la SELECT...INTO ..."

Pero después de generar manualmente una tabla, aún no funcionaba, y seguía mostrando el error de "palabra clave perdida".

Así que renuncié a esta vez y la resolví creando primero la tabla manualmente, y luego usando la declaración SELECT "clásica":

INSERT INTO assignment_20081120 SELECT * FROM assignment;

Lo cual funcionó como se esperaba. Si alguien viene con una explicación sobre cómo usar SELECT...INTO de manera correcta, ¡sería feliz!


Puede usar seleccionar en el interior de un bloque PLSQL como el siguiente.

Declare l_variable assignment%rowtype begin select * into l_variable from assignment; exception when no_data_found then dbms_output.put_line(''No record avialable'') when too_many_rows then dbms_output.put_line(''Too many rows'') end;

Este código solo funcionará cuando haya exactamente 1 fila en la asignación. Usualmente usará este tipo de código para seleccionar una fila específica identificada por un número de clave.

Declare l_variable assignment%rowtype begin select * into l_variable from assignment where ID=<my id number>; exception when no_data_found then dbms_output.put_line(''No record avialable'') when too_many_rows then dbms_output.put_line(''Too many rows'') end;


Última respuesta, ¡pero acabo de aparecer en esta lista hoy!

CREATE TABLE assignment_20101120 AS SELECT * FROM assignment;

Hace lo mismo.


Aunque esto no está directamente relacionado con la pregunta exacta del OP, descubrí que usar una palabra reservada de Oracle en su consulta (en mi caso, el alias IN ) puede causar el mismo error.

Ejemplo:

SELECT * FROM TBL_INDEPENTS IN JOIN TBL_VOTERS VO on IN.VOTERID = VO.VOTERID

O si está en la consulta en sí misma como un nombre de campo

SELECT ..., ...., IN, ..., .... FROM SOMETABLE

Eso también arrojaría ese error. Espero que esto ayude a alguien.