分布式操作中的 DISTINCT 类型

不可通过分布式查询从同一 GBase 8s 实例的另一数据库检索 DISTINCT 列值(也不可通过 INSERT、DELETE、MERGE 或 UPDATE 跨数据库分布式操作来修改),除非所有下列条件都为真:
  • 在下列基本类型之一上定义该 DISTINCT 类型:
    • 非 opaque 内建的数据类型
    • BOOLEAN 或 LVARCHAR 数据类型
    • 在 BOOLEAN 上、在 LVARCHAR 上,或在非 opaque 内建的数据类型上创建的 DISTINCT 类型。
    (此条件也递归地适用于 DISTINCT 类型的 DISTINCT 类型,在此,最终的基础类型为 BOOLEAN,或 LVARCHAR,或非 opaque 内建的数据类型。)
  • 显式地强制转型为 BOOLEAN、LVARCHAR 或非 opaque 内建的数据类型的 DISTINCT 类型
  • DISTINCT 类型,在所有参与的数据库中都正好以同一种方式定义它的层级和它的向内建的类型的显式的强制转型。
对于在分布式操作中的 DISTINCT 数据类型,数据类型层级必须有这些形式中的一种,不随所在的参与的数据库的不同而变化:
重要:

上图展示任何 DISTINCT 数据类型的基础类型的一般性逻辑层级。然而,如在上图中那样递归地使用 DISTINCT OF 关键字是无效的 SQL 语法。CREATE DISTINCT TYPE 语句必须为新的 DISTINCT 类型正好指定一个基础类型。要创建 DISTINCT 数据类型的层级,您必须为层级中的每个 DISTINCT 类型发出一个单独的 CREATE DISTINCT TYPE 语句。要了解定义新的 DISTINCT 数据类型的 SQL 语法,请参阅主题 CREATE DISTINCT TYPE 语句

在受保护的表的行中存储安全标签的 IDSSECURITYLABEL 数据类型是满足此要求的内建的 DISTINCT 类型,因为它的基础类型是内建的 VARCHAR(128) 数据类型。

用户定义的例程可从同一 GBase 8s 实例的另一数据库将 DISTINCT 数据类型返回给本地数据库,仅当所有上述条件都为真,且在所有参与的数据库中定义 UDR 的话。

适用于同一 GBase 8s 实例的跨数据库的分布式操作中的 DISTINCT 数据类型的那些规则,也适用于在不同的 GBase 8s 实例的数据库上的跨服务器分布式操作中的 DISTINCT 数据类型。

要获取关于 GBase 8s 在分布式操作中支持的数据类型的附加信息,请参阅 分布式查询中的数据类型