OceanBase 引用 Schema 對象

2021-06-28 18:04 更新

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

引用用戶的 Schema 中的對象

以下示例說明了 OceanBase 如何解析 SQL 語句中對象的引用。

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

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

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

  • 一張在您自己 Schema 中的表
  • 一個在您自己 Schema 中的視圖
  • 一個表或視圖的專有同義詞
  • 一個公共同義詞

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

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

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

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

引用其他 Schema 中的對象

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

schema.object

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

DROP TABLE hr.employees;


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號