Ошибка Oracle: ORA-00905: отсутствует ключевое слово
Вычисление строки SQL:
SELECT *
INTO assignment_20081120
FROM assignment ;
против базы данных в oracle для резервного копирования таблицы с именем присваивания дает мне следующую ошибку ORACLE:
ORA-00905: отсутствует ключевое слово
Ответы
Ответ 1
Если в таблице ASSIGNMENT
нет одной строки, а ASSIGNMENT_20081120
- это локальная переменная PL/SQL типа ASSIGNMENT%ROWTYPE
, это не то, что вы хотите.
Предполагая, что вы пытаетесь создать новую таблицу и скопировать существующие данные в эту новую таблицу
CREATE TABLE assignment_20081120
AS
SELECT *
FROM assignment
Ответ 2
Во-первых, я подумал:
"... В Microsoft SQL Server SELECT...INTO
автоматически создается новой таблицы, тогда как Oracle, похоже, вам необходимо вручную создать его перед выполнением SELECT...INTO
утверждение..."
Но после ручного создания таблицы он все равно не работает, все еще показывая ошибку "отсутствует ключевое слово".
Итак, я сдался на этот раз и решил его, сначала создав таблицу вручную, а затем используя инструкцию "classic" SELECT
:
INSERT INTO assignment_20081120 SELECT * FROM assignment;
Что работало, как ожидалось. Если кто-нибудь придумает объяснение того, как правильно использовать SELECT...INTO
, я был бы счастлив!
Ответ 3
Вы можете использовать select внутри блока PLSQL, например, ниже.
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;
Этот код будет работать только в том случае, если в задании имеется ровно 1 строка. Обычно вы будете использовать этот тип кода, чтобы выбрать определенную строку, идентифицированную номером ключа.
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;
Ответ 4
Поздний ответ, но я только что пришел в этот список сегодня!
CREATE TABLE assign_20101120 AS SELECT * FROM assign;
То же самое.
Ответ 5
Хотя это напрямую не связано с точным вопросом OP, но я только что узнал, что использование зарезервированного слова Oracle в вашем запросе (в моем случае псевдоним IN
) может привести к той же ошибке.
Пример:
SELECT * FROM TBL_INDEPENTS IN
JOIN TBL_VOTERS VO on IN.VOTERID = VO.VOTERID
Или если его в самом запросе как имя поля
SELECT ..., ...., IN, ..., .... FROM SOMETABLE
Это также вызовет эту ошибку. Я надеюсь, что это помогает кому-то.