Ошибка Oracle: ORA-00905: отсутствует ключевое слово
Исключая строку SQL:
SELECT *
INTO assignment_20081120
FROM assignment ;
для базы данных в Oracle для резервного копирования таблицы с именем присваивания возникает следующая ошибка ORACLE: ORA-00905: отсутствует ключевое слово
5 ответов
Если в ASSIGNMENT
стол и ASSIGNMENT_20081120
является локальной переменной типа PL/SQL ASSIGNMENT%ROWTYPE
, это не то, что вы хотите.
Предполагая, что вы пытаетесь создать новую таблицу и скопировать существующие данные в эту новую таблицу
CREATE TABLE assignment_20081120
AS
SELECT *
FROM assignment
Сначала я подумала:
"... В Microsoft SQL Server
SELECT...INTO
автоматически создает новую таблицу, в то время как Oracle, кажется, требует, чтобы вы создали ее вручную перед выполнениемSELECT...INTO
заявление..."
Но после генерации таблицы вручную она все равно не работала, по-прежнему показывая ошибку "отсутствует ключевое слово".
Поэтому я отказался от этого времени и решил его, сначала создав таблицу вручную, а затем с помощью "классики". SELECT
заявление:
INSERT INTO assignment_20081120 SELECT * FROM assignment;
Который работал как ожидалось. Если кто-нибудь придумает объяснение того, как использовать SELECT...INTO
правильно я был бы счастлив!
Вы можете использовать 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;
Хотя это не имеет прямого отношения к точному вопросу ОП, но я только что узнал, что в вашем запросе используется зарезервированное слово Oracle (в моем случае псевдоним IN
) может вызвать ту же ошибку.
Пример:
SELECT * FROM TBL_INDEPENTS IN
JOIN TBL_VOTERS VO on IN.VOTERID = VO.VOTERID
Или если его в самом запросе в качестве имени поля
SELECT ..., ...., IN, ..., .... FROM SOMETABLE
Это также выбросило бы эту ошибку. Я надеюсь, что это помогает кому-то.
Если вы делаете резервную копию таблицы в Oracle Database. Попробуйте следующее утверждение.
CREATE TABLE name_table_bk
AS
SELECT *
FROM name_table;
Я использую Oracle Database 12c.
Поздний ответ, но я только что пришел в этот список сегодня!
CREATE TABLE assignment_20101120 AS SELECT * ИЗ присвоения;
Делает то же самое.