Что-то неизвестное произошло с простым оператором CREATE в Oracle 9i

#oracle #oracle9i

#Oracle #oracle9i

Вопрос:

Однажды я случайно выдал инструкцию CREATE в SQL-запросе в Oracle 9i со всеми столбцами, заключенными в двойные кавычки, как показано ниже.

  CREATE TABLE emp("emp_id" VARCHAR2(6) primary key, 

"emp_name" VARCHAR2(30) not null, "salary" NUMBER);
 

вместо того, чтобы выдавать его как тот, который указан ниже, не заключая имена столбцов в кавычки, как обычно.

 CREATE TABLE emp(emp_id VARCHAR2(6) primary key, 

emp_name VARCHAR2(30) not null, salary NUMBER);
 

Этот простой запрос (впервые упомянутый) работал просто отлично, без каких-либо проблем, и таблица emp была создана успешно, после чего я создал три строки в этой таблице с помощью следующей команды INSERT.

 INSERT INTO emp VALUES("E0001", "Henery", 50000);
INSERT INTO emp VALUES("E0002", "Alex", 65000);
INSERT INTO emp VALUES("E0003", "Peter", 70000);
 

Три строки, успешно созданные в таблице emp. Затем я выполнил оператор SELECT, чтобы проверить, были ли они созданы или нет, и обнаружил, что они действительно были созданы.

 SELECT * FROM emp;
 

но когда я выполнил оператор SELECT, подобный приведенному ниже

 SELECT emp_id, emp_name, salary FROM emp;
 

Я убедился, что, хотя я использовал те же имена столбцов, что и в таблице emp, Oracle выдал ошибку, указывающую, что «Такие столбцы не существуют».

Ответ №1:

Из ссылки на язык SQL:

«Идентификатор, заключенный в кавычки, начинается и заканчивается двойными кавычками («). Если вы называете объект схемы, используя идентификатор, заключенный в кавычки, вы должны использовать двойные кавычки всякий раз, когда ссылаетесь на этот объект. «

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

1. Да, абсолютно верно, когда я попробовал эту версию SQL [ВЫБЕРИТЕ «emp_id», «emp_name», «salary» ИЗ emp;], это сработало. Я также узнал, что движок Oracle преобразует имя каждого столбца в заглавную букву перед компиляцией инструкции SQL, и если имена столбцов (объекты) заключены в двойные кавычки, движок Oracle не сможет преобразовать их в верхний регистр и, следовательно, не сможет найти такие имена столбцов, которые заключены вдвойные кавычки и строчные буквы и попытка скомпилировать такой SQL вызовут ошибку!