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 laSELECT...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.