GBase 8s SQL 指南:教程———8在外部数据库中访问和修改数据

8在外部数据库中访问和修改数据 

8.1访问其他数据库服务器

通过限定数据库对象(表、视图、同义词或例程)的名称,您可访问外部数据库中的任何 表或例程。

当外部表与当前数据库位于同一数据库服务器上时,您必须以数据库名称和冒号限定对象 名称。例如,要引用不是本地数据库的数据库中的表,下列SELECT语句访问来自外部数 据库的信息:

SELECT name, number FROM salesdb:contacts

在此示例中,查询从表contacts返回数据,该表在数据库salesdb中。

远程数据库服务器是不是当前数据库服务器的任何数据库服务器。当外部表在远程数据库 服务器上时,您必须以数据库服务器名称和数据库名称来限定数据库对象的名称,如下例 所示:

SELECT name, number FROM salesdb@distantserver:contacts

在此示例中,查询从表contacts返回数据,该表在远程数据库服务器distantserver上的数 据库salesdb中。

要了解关于如何在外部数据库中指定数据库对象的语法和规则,请参阅《GBase 8s SQL指 南:语法》。

8.1.1访问ANSI数据库

在ANSI数据库中,对象的所有者是对象名称的一部分:ownername.objectname。当当前 数据库和外部数据库都是ANSI数据库时,除非您是该对象的所有者,否则您必须包括 所有者名称。下列SELECT语句展示完全限定的表名称:

SELECT name, number FROM salesdb@aserver:ownername.contacts

提示:您始终可“超限定”对象名。即,您可指定完全的对象名称, database@servername:ownername.objectname,即使在您不需要完全的对象名称的情况下。

8.1.2在外部数据库服务器之间创建连接

您可在连接中使用相同的表示法。当您显式地指定数据库名称时,长的表名称可能会比较 累赘,除非您使用别名来缩短它们,如下例所示:

SELECT O.order_num, C.fname, C.lname

FROM masterdb@central:customer C, sales@boston:orders O

WHERE C.customejnum = O.Customejnum

8.1.3访问外部例程

要引用不是当前数据库服务器的数据库服务器上的例程,请以数据库服务器名称和数据库 名称(以及所有者名称,如果远程数据库符合ANSI的话)来限定例程名称,如下列 SELECT语句所示:

SELECT name, salesdb@boston:how_long()

FROM salesdb@boston:contacts

8.2对于远程数据库访问的限制

本部分总结对远程数据库访问的限制。

8.2.1访问多个数据库的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类型
•可强制转型为内建的类型的用户定义的数据类型(U DT)。

必须将上述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 o
同样的跨数据库要求也适用于跨两个或多个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类型。
————————————————
版权声明:本文为CSDN博主「aisirea」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aisirea/article/details/122999798

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值