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 ASSIGNMENT
en ASSIGNMENT_20081120
een lokale PL/SQL-variabele van het type ASSIGNMENT%ROWTYPE
is, 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...INTO
maakt automatisch
de nieuwe tabel terwijl Oracle lijkt te
vereisen dat u het handmatig maakt
voordat u deSELECT...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...INTO
op 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.