Oracle-fout: ORA-00905: zoekwoord ontbreekt

De regel SQL uitvoeren:

SELECT * 
  INTO assignment_20081120 
  FROM assignment ;

tegen een database in oracle om een back-up te maken van een tabel met de naam toewijzing, krijg ik de volgende ORACLE-fout:
ORA-00905: Ontbrekend zoekwoord


Antwoord 1, autoriteit 100%

Tenzij er een enkele rij is in de tabel ASSIGNMENTen ASSIGNMENT_20081120een lokale PL/SQL-variabele van het type ASSIGNMENT%ROWTYPEis, is dit is niet wat je wilt.

Ervan uitgaande dat u een nieuwe tabel probeert te maken en de bestaande gegevens naar die nieuwe tabel kopieert

CREATE TABLE assignment_20081120
AS
SELECT *
  FROM assignment

Antwoord 2, autoriteit 24%

Eerst dacht ik:

“…In Microsoft SQL Server de
SELECT...INTOmaakt automatisch
de nieuwe tabel terwijl Oracle lijkt te
vereisen dat u het handmatig maakt
voordat u de SELECT...INTO. uitvoert
verklaring…”

Maar nadat ik handmatig een tabel had gegenereerd, werkte deze nog steeds niet en werd nog steeds de foutmelding ‘ontbrekend zoekwoord’ weergegeven.

Dus ik gaf het deze keer op en loste het op door eerst de tabel handmatig te maken en vervolgens de “klassieke” SELECT-instructie te gebruiken:

INSERT INTO assignment_20081120 SELECT * FROM assignment;

Wat werkte zoals verwacht. Als iemand een uitleg heeft over hoe de SELECT...INTOop een correcte manier te gebruiken, zou ik blij zijn!


Antwoord 3, autoriteit 10%

Je kunt select gebruiken in een PLSQL-blok zoals hieronder.

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;

Deze code werkt alleen als er precies 1 rij in toewijzing is. Meestal gebruikt u dit soort code om een specifieke rij te selecteren die wordt geïdentificeerd door een sleutelnummer.

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;

Antwoord 4, autoriteit 7%

Hoewel dit niet direct gerelateerd is aan de exacte vraag van de OP, kwam ik er net achter dat het gebruik van een door Oracle gereserveerd woord in je zoekopdracht (in mijn geval de alias IN) dezelfde fout kan veroorzaken.

Voorbeeld:

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

Of als het in de query zelf staat als een veldnaam

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

Dat zou ook die fout veroorzaken. Ik hoop dat dit iemand helpt.


Antwoord 5, autoriteit 3%

Als u een back-up maakt van een tabel in Oracle Database. Je probeert de onderstaande verklaring.

CREATE TABLE name_table_bk
AS
SELECT *
  FROM name_table;

Ik gebruik Oracle Database 12c.


Antwoord 6, autoriteit 3%

Laat antwoord, maar ik kwam vandaag pas op deze lijst!

CREATE TABLE assignment_20101120 AS SELECT * FROM assignment;

Doet hetzelfde.

Other episodes