8在外部数据库中访问和修改数据
8.1访问其他数据库服务器
通过限定数据库对象(表、视图、同义词或例程)的名称,您可访问外部数据库中的任何 表或例程。
当外部表与当前数据库位于同一数据库服务器上时,您必须以数据库名称和冒号限定对象 名称。例如,要引用不是本地数据库的数据库中的表,下列语句访问来自外部数 据库的信息:
name, FROM :
在此示例中,查询从表返回数据,该表在数据库中。
远程数据库服务器是不是当前数据库服务器的任何数据库服务器。当外部表在远程数据库 服务器上时,您必须以数据库服务器名称和数据库名称来限定数据库对象的名称,如下例 所示:
name, FROM @:
在此示例中,查询从表返回数据,该表在远程数据库服务器上的数 据库中。
要了解关于如何在外部数据库中指定数据库对象的语法和规则,请参阅《GBase 8s SQL指 南:语法》。
8.1.1访问ANSI数据库
在ANSI数据库中,对象的所有者是对象名称的一部分:.。当当前 数据库和外部数据库都是ANSI数据库时,除非您是该对象的所有者,否则您必须包括 所有者名称。下列语句展示完全限定的表名称:
name, FROM @:.
提示:您始终可“超限定”对象名。即,您可指定完全的对象名称, @:.,即使在您不需要完全的对象名称的情况下。
8.1.2在外部数据库服务器之间创建连接
您可在连接中使用相同的表示法。当您显式地指定数据库名称时,长的表名称可能会比较 累赘,除非您使用别名来缩短它们,如下例所示:
O., C.fname, C.lname
FROM @: C, sales@: O
WHERE C. = O.
8.1.3访问外部例程
要引用不是当前数据库服务器的数据库服务器上的例程,请以数据库服务器名称和数据库 名称(以及所有者名称,如果远程数据库符合ANSI的话)来限定例程名称,如下列 语句所示:
name, @:()
FROM @:
8.2对于远程数据库访问的限制
本部分总结对远程数据库访问的限制。
8.2.1访问多个数据库的SQL语句
您可跨数据库和跨数据库服务器实例运行下列SQL语句:
VIEW
DROP
INFO
LOAD
LOCK TABLE
MERGE
TABLE
限制:
要跨数据库或跨数据库服务器成功地运行这些SQL语句中的每一个,本地数据库与外部 数据库必须都具有相同的日志记录模式。例如,如果作为MODE ANSI创建了您从其发出
分布式查询的本地数据库,该查询访问的其他数据库都不可为无日志记录的,且不可使用 显式的事务。
在跨数据库操作中返回数据类型
使用SQL语句或UDR来访问本地GBase 8s数据库服务器实例的其他数据库的分布式 操作可访问这些数据类型的值:
非的任何内建的原子数据类型
BLOB、, BSON、CLOB、JSON 和 类型
基于内建的类型的类型
•可强制转型为内建的类型的用户定义的数据类型(U DT)。
必须将上述或UDT值都显式地强制转型为内建的数据类型,且必须在所有参 与的数据库中定义所有类型、UDT和强制转型。
它们还可访问可强制转型为内建的类型的UDT,假设显式地将或UDT值强 制转型为内建的类型,以及在所有参与的数据库中定义的所有类型、UDT和 强制转型。
如果在所有参与的数据库中定义UDR,则SPL、C和Java语言UDR可返回这些数据 类型作为参数或作为返回值。必须跨所有参与的GBase 8s实例,来复制在这些数据类型之 上定义的任何隐式的或显式的强制转型。数据类型必须具有与在分布式查询中 参与的所有数据库中定义的完全相同的数据类型层级结构。
跨数据库的分布式查询或其他访问本地GBase 8s数据库服务器的另一数据库的跨数据库 DML操作将会失败并报错,如果它引用包括任何下列数据类型的列的表、视图或同义词的 话:
IMPEX
以上列出的任何内建的数据类型的
复合的类型,包括、LIST、或SET,以及命名了的或 未命名的ROW类型。
对于以这些内建的或复合的数据类型访问表的跨数据库分布式操作的这一限制, 也适用于访问两个或多个数据库服务器实例的数据库的操作,这在下一部分描述。
在跨服务器操作中的返回数据类型
跨两个或多个GBase 8s实例的分布式查询(或任何其他分布式DML操作或函数调用)不 可返回复合的或大对象数据类型,也不可返回大部分UDT或数据类型。跨服务 器分布式查询、DML操作和函数调用仅可返回下列数据类型:
•任何非的内建数据类型
BSON
JSON
非的内建类型的
或 的
BSON 或 JSON 的
在此列表中出现在上面的任何类型的 o
同样的跨数据库要求也适用于跨两个或多个GBase 8s数据库服务器实例的数据库的分布 式SQL操作,即,在每个参与的数据库中,所有UDR、强制转型和数据类 型都要有相同的定义。
访问另一 GBase 8s实例的数据库的跨服务器DML操作将会失败并报错。然而,如果它引 用包括任意下列数据类型的表对象:
BLOB
CLOB
STAT
•用户定义的类型
罗列在上面的任何内建的数据类型的
复合的类型,包括、LIST、或SET,以及命名了的或 未命名的ROW类型。