#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
и выдает ошибку, которую вы видите.