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

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

    根据 SQL 语句的上下文,departments 在数据库中可能是:

    • 一张在您自己 Schema 中的表

    • 一个表或视图的专有同义词

    • 一个公共同义词

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

    1. 如果该对象到目前为止没有在任何名称空间中被搜索到,则 OceanBase 将搜索包含公共同义词的名称空间。如果对象在包含公共同义词的名称空间中,则 OceanBase 尝试对该对象执行该语句。如果此对象的类型不是该 SQL 语句所需要的类型,则 OceanBase 返回错误,例如在此示例中,如果 departments 是一个代表了序列的公共同义词,那么 OceanBase 将返回错误。

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

    反之,如果同义词没有任何依赖表或用户定义的类型,则可以在与依赖对象相同的 Schema 中创建具有相同名称的对象。OceanBase 会使所有依赖对象无效,并在下一次访问它们时重新验证它们。

    引用其他 Schema 中的对象

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