Отсутствует ключевое слово select в Oracle SQL

#sql #oracle

#sql #Oracle

Вопрос:

Я получаю эту ошибку

Ошибка SQL: ORA-00928: отсутствует ключевое слово ВЫБОРА
00928. 00000 — «отсутствует ключевое слово ВЫБОРА»`

когда я пытаюсь вставить вот так

 create table certf
(
    certificate_id integer primary key,
    certificate_name varchar(100) not null,
    certificate_content varchar(300) not null
);

insert into certf (amp;certificate_id, amp;certificate_name, amp;certificate_content);
  

Ответ №1:

Вы пропускаете values на самом деле:

 insert into certf (certificate_id, certificate_name, certificate_content)
    values (amp;certificate_id, amp;certificate_name, amp;certificate_content);
  

Обратите внимание, что я также добавил список столбцов в insert . Это лучшая практика.

Комментарии:

1. Вы могли бы объяснить сообщение об ошибке «требуются значения (..) или select ..». Из-за отсутствующих значений ожидается выбор.

Ответ №2:

Если предполагается, что это значения, которые вы предоставляете в качестве значений подстановки, то вам не хватает values ключевого слова:

 insert into certf values (amp;certificate_id,amp;certificate_name,amp;certificate_content);
  

Но вам нужно, чтобы строковые значения были в кавычках:

 insert into certf values (amp;certificate_id,'amp;certificate_name','amp;certificate_content');
  

и вы также должны указать имена столбцов:

 insert into certf (certificate_id,certificate_name,certificate_content)
values (amp;certificate_id,'amp;certificate_name','amp;certificate_content');
  

С вашим текущим кодом анализатор видит этот первый список — возможных, но фактически недопустимых в данном случае — идентификаторов, то есть имен столбцов; потому что он еще не видел этого values ключевого слова. Это рассматривается как что-то вроде:

 insert into certf (42,some_name,some_content);
  

И, сделав это, и когда он по-прежнему не видит values ключевое слово или список значений, он ожидает, что это будет insert ... select конструкция вместо этого. Вы могли бы сделать это таким образом:

 insert into certf (certificate_id,certificate_name,certificate_content)
select amp;certificate_id,'amp;certificate_name','amp;certificate_content' from dual;
  

Но вы этого не делаете. Таким образом, он также не видит select и выдает ошибку, которую вы видите.