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