我認爲引號(「)僅僅是一種類型的分組標記,但我調試一些NHibernate的代碼,並注意到,雖然表名周圍的引號是幹什麼用的?
SELECT * FROM site WHERE site_id = 3;
做工精細
SELECT * FROM "site" WHERE site_id = 3;
失敗,表或視圖不存在錯誤。
是怎麼回事?
我認爲引號(「)僅僅是一種類型的分組標記,但我調試一些NHibernate的代碼,並注意到,雖然表名周圍的引號是幹什麼用的?
SELECT * FROM site WHERE site_id = 3;
做工精細
SELECT * FROM "site" WHERE site_id = 3;
失敗,表或視圖不存在錯誤。
是怎麼回事?
把周圍甲骨文原因的標識符雙引號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"
將工作
應該補充該標識符在引號中可以包含特殊字符,例如「a-b c.d」是一個有效的標識符。
這個答案忽略了它也允許標識符包含否則將是非法的字符的事實,例如空格字符。這也可能是最好的做法,只使用大寫字母,數字和下劃線。這樣做會讓每個人的生活更輕鬆。 – jpmc26 2016-06-14 18:55:13