OceanBase 引用 Schema 對(duì)象

2021-06-28 18:04 更新

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

引用用戶(hù)的 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è)表或視圖的專(zhuān)有同義詞
  • 一個(gè)公共同義詞

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

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

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

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

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

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

schema.object

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

DROP TABLE hr.employees;


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)