Сообщение об ошибке Oracle 11g _ ORA-00904 с инструкцией Insert

#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 /…