2009-02-18 2 views
37

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

SELECT * FROM site WHERE site_id = 3; 

Работает отлично

SELECT * FROM "site" WHERE site_id = 3; 

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

Что дает?

ответ

78

Положив двойные кавычки вокруг идентификатора в 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" 

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

+1

Этот ответ не учитывает того факта, что он также позволяет идентификаторам содержать символы, которые в противном случае были бы незаконными, например пробельный символ. Также, вероятно, лучше всего использовать только буквы верхнего регистра, цифры и подчеркивание. Это облегчит жизнь каждому. – jpmc26

9

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

Смежные вопросы