OceanBase 引用 Schema 對(duì)象

2021-06-28 18:04 更新

當(dāng)在 SQL 語(yǔ)句中引用對(duì)象時(shí),OceanBase 會(huì)考慮 SQL 語(yǔ)句的上下文并在適當(dāng)?shù)拿Q空間中找到該對(duì)象。找到對(duì)象后,OceanBase 執(zhí)行 SQL 語(yǔ)句對(duì)該對(duì)象指定的操作。如果在適當(dāng)?shù)拿Q空間中找不到命名的對(duì)象,則返回錯(cuò)誤。

引用用戶的 Schema 中的對(duì)象

以下示例說(shuō)明了 OceanBase 如何解析 SQL 語(yǔ)句中對(duì)象的引用。

執(zhí)行以下語(yǔ)句,向名為 departments 的表中添加了一行數(shù)據(jù):

INSERT INTO departments 
VALUES (280, 'ENTERTAINMENT_CLERK', 206, 1700);

根據(jù) SQL 語(yǔ)句的上下文,departments 在數(shù)據(jù)庫(kù)中可能是:

  • 一張?jiān)谀约?Schema 中的表
  • 一個(gè)在您自己 Schema 中的視圖
  • 一個(gè)表或視圖的專有同義詞
  • 一個(gè)公共同義詞

OceanBase 始終會(huì)先嘗試在您自己的 Schema 中的名稱空間里解析被引用對(duì)象,然后再考慮該 Schema 之外的名稱空間。在此示例中,OceanBase 嘗試解析如下:

  1. 首先,OceanBase 嘗試在您自己的包含了表、視圖和專用同義詞的 Schema 中的名稱空間里去定位對(duì)象。如果對(duì)象是專用同義詞,則 OceanBase 會(huì)找到該同義詞所代表的對(duì)象。該對(duì)象可以在您自己的 Schema 中,也可以在其他 Schema 中或者在另一個(gè)數(shù)據(jù)庫(kù)中。該對(duì)象也可以是其他的同義詞,在這種情況下,OceanBase 會(huì)找到同義詞所代表的對(duì)象。
  2. 如果對(duì)象在名稱空間中被找到,則 OceanBase 嘗試對(duì)該對(duì)象執(zhí)行 SQL 語(yǔ)句。在此示例中,OceanBase 嘗試將一行數(shù)據(jù)添加到 departments 中。如果此對(duì)象的類型不是該 SQL 語(yǔ)句所需要的類型,則 OceanBase 返回錯(cuò)誤。在此示例中,departments 必須是表、視圖或者可以是可以解析為表或視圖的專用同義詞。如果 departments 是序列,則 OceanBase 返回錯(cuò)誤。
  3. 如果該對(duì)象到目前為止沒(méi)有在任何名稱空間中被搜索到,則 OceanBase 將搜索包含公共同義詞的名稱空間。如果對(duì)象在包含公共同義詞的名稱空間中,則 OceanBase 嘗試對(duì)該對(duì)象執(zhí)行該語(yǔ)句。如果此對(duì)象的類型不是該 SQL 語(yǔ)句所需要的類型,則 OceanBase 返回錯(cuò)誤,例如在此示例中,如果 departments 是一個(gè)代表了序列的公共同義詞,那么 OceanBase 將返回錯(cuò)誤。

如果公共同義詞包含任何依賴表或用戶定義類型,則不能在與依賴對(duì)象相同的 Schema 中創(chuàng)建與同義詞同名的對(duì)象。

反之,如果同義詞沒(méi)有任何依賴表或用戶定義的類型,則可以在與依賴對(duì)象相同的 Schema 中創(chuàng)建具有相同名稱的對(duì)象。OceanBase 會(huì)使所有依賴對(duì)象無(wú)效,并在下一次訪問(wèn)它們時(shí)重新驗(yàn)證它們。

引用其他 Schema 中的對(duì)象

要引用您的 Schema 之外的 Schema 中的對(duì)象,需要在對(duì)象名稱前添加 Schema 名稱:

schema.object

例如,以下示例展示了在名為 hr 的 Schema 中刪除表 employees

DROP TABLE hr.employees;


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)