GBase8s数据库对 MERGE 的源表和目标表的限制

哪些表对象可为 MERGE 语句的源或目标,这取决于该表对象的属性,以及发出 MERGE 语句的

对象所持有的访问权限。

对于当前会话连接到的数据库,目标表必须为本地的,但您可指定一远程表作为源表,或在

UPDATA 操作的 SET 子句的子查询中,或在 INSERT 操作的 VALUES 子句的子查询中。

下列章节标识对源表和目标表的附加的限制。

对源表的限制

源对象可为 STANDARD、RAW、TEMP、EXTERNAL 或集合派生的表或视图的名称或同义词。

它可与目标对象在同一数据库中,或在本地 GBase 8s 实例的不同数据库中,它或可为由不同的

GBase 8s 实例管理的远程表。

如果源是由查询的结果所定义的集合派生的表,则 USING 子句可声明派生的列的名称,MERGE

语句的 SET 和 VALUES 子句可引用这些列。

发出 MERGE 语句的用户必须持有对源对象的数据库的 Connect 访问权限(或更高的权限),其

必须还持有对源对象的 Select 权限(或更高的权限)。可分别地授予该用户这些访问权限,或该

用户作为 PUBLIC 组的成员而持有它们,或如果当前的或缺省的角色或 PUBLIC 持有那些权限,

则可通过用户的角色持有权限。

如果源对象或其任意列受到基于标签的安全策略保护,则发出 MERGE 语句的用户必须有提供其

读取该源对象的充足凭证的安全标签(或必须持有安全策略豁免)。如果该用户的凭证不足以读取

受保护的列,根据标准基于标签的访问控制(LBAC)规则,则该 MERGE 语句仅可处理该源数据

的一个子集。如果此子集为空,则 MERGE 语句不可从源对象向目标表内插入任何值;

下列限制适用于源表对象:

1、源不可为在其上定义启用的 SELECT 触发器的视图。

2、源不可为与目标表在同一表层级中的类型化表

3、在 Delete 合并中,源不可与目标有孩子表关系,由启用的引用约束定义,如果以 ON

DELETE CASCADE 关键字定义了那个约束的话。(然而,孩子表关系不影响 Delete 合

并,除非目标表约束指定级联删除。)

对目标表的限制

目标表对象必须在当前会话连接到的同一 GBase 8s 实例的数据库中。它可为 STANDARD、RAW

或 TEMP 表,或可更新的视图的名称或同义词。如果目标在表层级内为可更新的,则 Delete 子句

还删除该目标表的所有子表中相应的行。

发出 MERGE 语句的用户必须持有对目标对象的数据库的 Connect 访问权限(或更高的权限),

且必须持有对目标对象的 Insert 权限和 Update 或 Delete 权限,如果 MERGE 语句包括相应的

Insert、Update 或 Delete 子句的话;

下列限制适用于 MERGE 语句的目标表。如果那个表有任何下列的属性,则 MERGE 操作返回错误。

1、目标不可为该源表所在同一表层级中的类型化表。

2、目标不可为“虚拟表接口”(VTI)表。

3、目标不可为 CREATE EXTERNAL TABLE 语句定义的对象。

4、目标不可在远程 GBase 8s 实例的数据库中。

5、目标不可为系统目录表。

6、目标不可为在其上定义启用的 INSTEAD OF 触发器的视图。

7、目标不可为只读视图。

8、目标不可为伪表(在系统数据库中的常驻内存的对象,比如 sysmaster 或 sysadmin 数据

库)。

9、目标不可为同一 MERGE 语句的任何子查询的数据源,包括 ON 子句中的、SET 子句中

的或 VALUES 子句中的子查询。

10、如果 MERGE 语句包括 DELETE 子句,则目标不可与源表有父表关系,如果通过指定

ON DELETE CASCADE 关键字的启用的引用约束定义此关系的话。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值