访问多个数据库的 SQL 语句

您可跨数据库和跨数据库服务器实例运行下列 SQL 语句:
  • CREATE DATABASE
  • CREATE SYNONYM
  • CREATE VIEW
  • DATABASE
  • DELETE
  • DROP DATABASE
  • EXECUTE FUNCTION
  • EXECUTE PROCEDURE
  • INFO
  • INSERT
  • LOAD
  • LOCK TABLE
  • MERGE
  • SELECT
  • UNLOAD
  • UNLOCK TABLE
  • UPDATE
限制:

要跨数据库或跨数据库服务器成功地运行这些 SQL 语句中的每一个,本地数据库与外部数据库必须都具有相同的日志记录模式。例如,如果作为 MODE ANSI 创建了您从其发出分布式查询的本地数据库,该查询访问的其他数据库都不可为无日志记录的,且不可使用显式的事务。

在跨数据库操作中返回数据类型

使用 SQL 语句或 UDR 来访问本地 GBase 8s 数据库服务器实例的其他数据库的分布式操作可访问这些数据类型的值:
  • 非 opaque 的任何内建的原子数据类型
  • BLOB、BOOLEAN、BSON、CLOB、JSON 和 LVARCHAR opaque 类型
  • 基于内建的类型的 DISTINCT 类型
  • 可强制转型为内建的类型的用户定义的数据类型(UDT)。
必须将上述 DISTINCT 或 UDT 值都显式地强制转型为内建的数据类型,且必须在所有参与的数据库中定义所有 DISTINCT 类型、UDT 和强制转型。

它们还可访问可强制转型为内建的类型的 UDT,假设显式地将 DISTINCT 或 UDT 值强制转型为内建的类型,以及在所有参与的数据库中定义的所有 DISTINCT 类型、UDT 和强制转型。

如果在所有参与的数据库中定义 UDR,则 SPL、C 和 Java 语言 UDR 可返回这些数据类型作为参数或作为返回值。必须跨所有参与的 GBase 8s 实例,来复制在这些数据类型之上定义的任何隐式的或显式的强制转型。DISTINCT 数据类型必须具有与在分布式查询中参与的所有数据库中定义的完全相同的数据类型层级结构。

跨数据库的分布式查询或其他访问本地 GBase 8s 数据库服务器的另一数据库的跨数据库 DML 操作将会失败并报错,如果它引用包括任何下列数据类型的列的表、视图或同义词的话:
  • IMPEX
  • IMPEXBIN
  • LOLIST
  • SENDRECV
  • 以上列出的任何内建的 opaque 数据类型的 DISTINCT
  • 复合的类型,包括 COLLECTION、LIST、MULTISET 或 SET,以及命名了的或未命名的 ROW 类型。

对于以这些内建的 opaque 或复合的数据类型访问表的跨数据库分布式操作的这一限制,也适用于访问两个或多个数据库服务器实例的数据库的操作,这在下一部分描述。

在跨服务器操作中的返回数据类型

跨两个或多个 GBase 8s 实例的分布式查询(或任何其他分布式 DML 操作或函数调用)不可返回复合的或大对象数据类型,也不可返回大部分 UDT 或 opaque 数据类型。跨服务器分布式查询、DML 操作和函数调用仅可返回下列数据类型:
  • 任何非 opaque 的内建数据类型
  • BOOLEAN
  • BSON
  • JSON
  • LVARCHAR
  • 非 opaque 的内建类型的 DISTINCT
  • BOOLEAN 或 LVARCHAR 的 DISTINCT
  • BSON 或 JSON 的 DISTINCT
  • 在此列表中出现在上面的任何 DISTINCT 类型的 DISTINCT。
同样的跨数据库要求也适用于跨两个或多个 GBase 8s 数据库服务器实例的数据库的分布式 SQL 操作,即,在每个参与的数据库中,所有 UDR、强制转型和 DISTINCT 数据类型都要有相同的定义。
访问另一 GBase 8s 实例的数据库的跨服务器 DML 操作将会失败并报错。然而,如果它引用包括任意下列数据类型的表对象:
  • BLOB
  • CLIENTBINVAL
  • CLOB
  • IFX_LO_SPEC
  • IFX_LO_STAT
  • INDEXKEYARRAY
  • POINTER
  • RTNPARAMTYPES
  • SELFUNCARGS
  • STAT
  • 用户定义的 OPAQUE 类型
  • 罗列在上面的任何内建的 opaque 数据类型的 DISTINCT
  • 复合的类型,包括 COLLECTION、LIST、MULTISET 或 SET,以及命名了的或未命名的 ROW 类型。