#oracle #oracle11g
#Oracle #oracle11g
Вопрос:
Я создал простую таблицу:
CREATE TABLE "ADVUPGRD"."GL_CAMPUSEMAILS"
("Campus" VARCHAR2(2 CHAR), "SEND_TO" VARCHAR2(60 CHAR), "SEND_CC"
VARCHAR2(250 CHAR), "SEND_BCC" VARCHAR2(60 CHAR))
Таблица создана, я могу выполнить select * из gl_campusemails, и она выдает мне пустую строку, поскольку я еще не заполнил эту таблицу.
Когда я заполняю таблицу, я использую это:
INSERT INTO GL_CAMPUSEMAILS (Campus, Send_To, Send_CC, Send_BCC)
VALUES('CP', 'as@gmail.com', 'test@yahoo.com', 'test2@gmail.com');
но я получил это сообщение об ошибке:
Ошибка, начинающаяся со строки: 8 в command —
INSERT В GL_CAMPUSEMAILS (Campus, Send_To, Send_CC, Send_BCC) ЗНАЧЕНИЯ (‘CP’, ‘as@gmail.com ‘, ‘test@yahoo.com ‘, ‘test2@gmail.com ‘)
Ошибка в командной строке: 8 Столбец: 56 Отчет об ошибке — Ошибка SQL: ORA-00904: «SEND_BCC»: недопустимый идентификатор 00904. 00000 — «%s: недопустимый идентификатор» * Причина:
* Действие:
Я погуглил и нашел много сообщений, но они в основном связаны с использованием зарезервированных слов в инструкции select. Я не думаю, что столбцы, которые я использовал здесь, принадлежат каким-либо зарезервированным словам.Что я здесь сделал не так
Комментарии:
1. docs.oracle.com/database/121/SQLRF /… в двух словах: никогда не используйте двойные кавычки в SQL
2. Не знаю, относится ли это к вашей проблеме, но в вашем операторе insert двойные кавычки отсутствуют. Без двойных кавычек все имена столбцов и имена таблиц интерпретируются как прописные. Но в столбцах вашей таблицы смешанный регистр (из-за двойных кавычек там). Таким образом, он пытается вставить в столбец CAMPUS, но есть только столбец с именем Campus, что не одно и то же…
Ответ №1:
Если вы используете двойные кавычки при создании таблицы, имена столбцов создаются точно так, как вы ввели, с учетом регистра; таким образом, вставка должна быть:
INSERT INTO GL_CAMPUSEMAILS(
"Campus",
"SEND_TO",
"SEND_CC",
"SEND_BCC"
)
VALUES (
'CP',
'as@gmail.com',
'test@yahoo.com',
'test2@gmail.com'
);
Если вы создадите таблицу без кавычек, это будет работать нормально
CREATE TABLE GL_CAMPUSEMAILS
(
Campus VARCHAR2(2 CHAR),
SEND_TO VARCHAR2(60 CHAR),
SEND_CC VARCHAR2(250 CHAR),
SEND_BCC VARCHAR2(60 CHAR)
);
INSERT INTO GL_CAMPUSEMAILS(
Campus,
SEND_TO,
SEND_CC,
SEND_BCC
)
VALUES (
'CP',
'as@gmail.com',
'test@yahoo.com',
'test2@gmail.com'
);
Обратите внимание, что без использования двойных кавычек Oracle будет рассматривать все объекты с именами в верхнем регистре; так, например, "CAMPUS"
, campus
, CaMpUs
будет работать, в то время "campus"
как не будет
Комментарии:
1. Боже мой! Спасибо! Почему я не получил такого объяснения, когда искал ответ в Google. Еще раз спасибо, я это очень ценю.
2. Я изменил его без двойных кавычек, чтобы упростить задачу. Спасибо, ребята!
3. @user1557856: прочитайте руководство 😉 Там все объясняется: docs.oracle.com/database/121/SQLRF /…