OceanBase 數據庫對象命名規(guī)則

2021-06-17 18:02 更新

數據庫對象標識符

每個數據庫對象都有名字。在 SQL 語句中您可以使用引用標識符和非引用標識符來命名任何數據庫對象:

  • 引用標識符:以雙引號 " " 為開頭和結尾的標識符。如果使用引用標識符命名 Schema 對象,則在引用該對象時必須使用雙引號。

  • 非引用標識符:標識符中不包含任何標點符號。

但是,數據庫名稱、全局數據庫名稱、數據庫鏈接名稱、磁盤組名稱和可插入數據庫(PDB)始終不區(qū)分大小寫,并以大寫形式存儲。如果使用引用標識符為它們命名,那么引號將被忽略。

注意 
OceanBase 并不建議您使用引用標識符來命名數據庫對象。這些引用標識符在 SQL PLUS 中兼容,但是在其他數據庫對象管理工具中可能不被識別。

標識符使用規(guī)則

以下是一些適用于引用標識符和非引用標識符的規(guī)則,除非另有說明,否則以下規(guī)則對引用標識符和非引用標識符同時適用。

標識符的長度

標識符的長度為 1~128 字節(jié)。

如果標識符包含由句點分隔的多個部分,則每個部分最長都可達 128 字節(jié)。每個句點分隔符以及旁邊的引號都算作一個字節(jié)。例如以下字符串:

"schema"."table"."column"

示例名稱中的三部分 schema、table 和 column 各自最長可以是 128 字節(jié),每個引號和句點都是單字節(jié)字符,所以示例中標識符的總長度為 392 字節(jié)。

保留字做標識符

非引用標識符不能是 OceanBase SQL 保留字。引用標識符可以是保留字,但不建議這樣做。根據您計劃用于訪問數據庫對象的工具不同,名稱可能進一步受到其他產品特定的保留字限制。

注意 
保留字 ROWID 是這個規(guī)則的一個例外。不能使用大寫單詞 ROWID 作為列的名稱,無論是帶引號的還是不帶引號的。但是,引用標識符作為列名時,不可以使用全大寫單詞,但是可以包含一個或多個小寫字母(例如,“Rowid”或“Rowid”)。

特殊含義單詞做標識符

OceanBase 中的 SQL 語言包含了其他具有特殊含義的單詞。這些詞包括數據類型、Schema 名、函數名、虛擬系統表 DUAL 和關鍵字(SQL 語句中的大寫單詞,如 DIMENSIONSEGMENT、ALLOCATE、DISABLE 等)。這些詞不是保留字,但是,OceanBase 在內部以特定的方式使用它們。因此,如果您使用這些詞作為對象和對象部件的名稱,SQL 語句可能會難以閱讀,并可能導致不可預測的結果。尤其是不要使用 SQL 內置函數的名稱作為 Schema 對象和用戶自定義函數的名稱。

ASCII 字符做標識符

在數據庫名稱、全局數據庫名稱和數據庫鏈接名稱中您應該使用 ASCII 字符集中的字符,因為這些字符擁有跨不同平臺和操作系統的最佳兼容性。多租戶容器數據庫(CDB)中的通用用戶和通用角色的名稱只能使用 ASCII 字符集中的字符。

密碼中的字符

密碼中可以包含多位字節(jié)的字符,如漢字或中文標點等。

標識符的開頭

非引用標識符必須以數據庫字符集中的字母字符開頭。引用標識符可以以任何字符開頭。

標識符中的符號

非引用標識符只能包含來自數據庫字符集的字母數字字符和下劃線(_)。但是用于數據庫鏈接名稱時可以包含句點(.)和符號 @。引用標識符可以包含任何字符、標點符號和空格。但是,引用標識符和非引用標識符都不能包含雙引號或空字符(\0)。

對象名稱在名稱空間中的限制

在同一個名稱空間中,表、視圖、私有同義詞不能擁有相同的名稱。

標識符的大小寫

非引用標識符不區(qū)分大小寫,OceanBase 將他們存儲為大寫。引用標識符區(qū)分大小寫,所以通過將名稱括在雙引號里,在同一命名空間的不同對象可以擁有以下類型的名稱:

"employees"
"Employees"
"EMPLOYEES"

由于非引用標識符不區(qū)分大小寫,所以 OceanBase 認為以下名稱是相同的,他們不能作為同一名稱空間下不同對象的名字:

employees
EMPLOYEES
"EMPLOYEES"

大寫標識符

存儲或比較大寫的標識符時,每個字符的大寫形式是通過應用數據庫字符集的大寫規(guī)則來確定的。由對話設置 NLS_SORT 所設定的特定語言規(guī)則不在考慮的范圍內。此行為是將 SQL 函數 UPPER 應用于標識符,而不是將函數 NLS_UPPER 應用于標識符。

數據庫字符集的大寫規(guī)則被應用到自然語言時可能產生不正確的結果。例如,德國小寫字母 ?,它在數據庫字符集大寫規(guī)則中并沒有對應的大寫形式, 所以當含有它的標識符被轉換為大寫形式時它并不會被轉變。

數據庫字符集大寫規(guī)則確保標識符在任何語言配置的會話中的樣式是相同的。如果希望標識符在某種自然語言中看起來正確,那么可以通過引號來保留它的小寫形式,或者在使用該標識符時使用對應語言上正確的大寫形式。

列的名稱

同一表或視圖中的列不能具有相同的名稱。但是,不同表或視圖中的列可以具有相同的名稱。

程序和函數的名稱

如果同一包中的程序或函數所包含的參數的數量和數據類型不同,則它們可以具有相同的名稱。在同一個包中使用不同的參數創(chuàng)建具有相同名稱的多個過程或函數稱為重載過程或函數。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號