Что именно делают кавычки вокруг имени таблицы?
Я думал, что кавычка (") была просто типом маркера группировки, но я отлаживаю некоторый код NHibernate и замечаю, что пока
SELECT * FROM site WHERE site_id = 3;
Работает отлично
SELECT * FROM "site" WHERE site_id = 3;
не удается с таблицей или в представлении не существует ошибки.
Что дает?
2 ответа
Размещение двойных кавычек вокруг идентификатора в Oracle заставляет Oracle обрабатывать идентификатор как чувствительный к регистру, а не использовать значение по умолчанию без учета регистра. Если вы создаете таблицу (или столбец) с двойными кавычками вокруг имени, вы всегда должны ссылаться на идентификатор с двойными кавычками и правильно указывать регистр (за исключением всех идентификаторов верхнего регистра, где двойные кавычки не имеют смысла).).
Под прикрытием Oracle всегда выполняет сопоставление идентификатора с учетом регистра. Но перед выполнением сопоставления всегда приводятся идентификаторы, которые не заключаются в двойные кавычки в верхний регистр. Если вы помещаете двойные кавычки вокруг идентификатора, Oracle пропускает приведение к верхнему регистру.
Так что если вы делаете что-то вроде
CREATE TABLE my_table(
col1 number,
col2 number
)
вы можете
SELECT * FROM my_table
SELECT * FROM MY_TABLE
SELECT * FROM My_Table
SELECT * FROM "MY_TABLE"
но что-то вроде
SELECT * FROM "my_table"
не удастся.
С другой стороны, если вы делаете что-то вроде
CREATE TABLE "my_other_table"(
col1 number,
col2 number
)
ты не можешь сделать
SELECT * FROM my_other_table
SELECT * FROM MY_OTHER_TABLE
SELECT * FROM My_Other_Table
SELECT * FROM "MY_OTHER_TABLE"
но это
SELECT * FROM "my_other_table"
буду работать
Следует добавить, что идентификаторы в кавычках могут содержать специальные символы, например, "ab cd" является допустимым идентификатором.