Что именно делают кавычки вокруг имени таблицы? - PullRequest
43 голосов
/ 19 февраля 2009

Я думал, что кавычка (") была просто типом маркера группировки, но я отлаживаю некоторый код NHibernate и замечаю, что пока

SELECT * FROM site WHERE site_id = 3;

Работает нормально

SELECT * FROM "site" WHERE site_id = 3;

не удается с таблицей или в представлении не существует ошибки.

Что дает?

Ответы [ 2 ]

84 голосов
/ 19 февраля 2009

Размещение двойных кавычек вокруг идентификатора в 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" 

будет работать

9 голосов
/ 19 февраля 2009

Следует добавить, что идентификаторы в кавычках могут содержать специальные символы, например, «a-b c.d» является действительным идентификатором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...