以下示例说明了 OceanBase 如何解析 SQL 语句中对象的引用。

    执行以下语句,向名为 departments 的表中添加了一行数据:

    • 一张在您自己 Schema 中的表
    • 一个表或视图的专有同义词
    • 一个公共同义词

    OceanBase 始终会先尝试在您自己的 Schema 中的名称空间里解析被引用对象,然后再考虑该 Schema 之外的名称空间。在此示例中,OceanBase 尝试解析如下:

    1. 如果对象在名称空间中被找到,则 OceanBase 尝试对该对象执行 SQL 语句。在此示例中,OceanBase 尝试将一行数据添加到 departments 中。如果此对象的类型不是该 SQL 语句所需要的类型,则 OceanBase 返回错误。在此示例中,departments 必须是表、视图或者可以是可以解析为表或视图的专用同义词。如果 departments 是序列,则 OceanBase 返回错误。
    2. 如果该对象到目前为止没有在任何名称空间中被搜索到,则 OceanBase 将搜索包含公共同义词的名称空间。如果对象在包含公共同义词的名称空间中,则 OceanBase 尝试对该对象执行该语句。如果此对象的类型不是该 SQL 语句所需要的类型,则 OceanBase 返回错误,例如在此示例中,如果 departments 是一个代表了序列的公共同义词,那么 OceanBase 将返回错误。

    如果公共同义词包含任何依赖表或用户定义类型,则不能在与依赖对象相同的 Schema 中创建与同义词同名的对象。

    引用其他 Schema 中的对象

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

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