GBase 8s SQL 指南:语法————2.2 SQL 语句

本文详细介绍了GBase 8s数据库中的ALTER语句,包括ALTER ROUTINE用于修改用户定义的例程,ALTER SECURITY LABEL COMPONENT用于向安全标签构件添加元件,ALTER SEQUENCE用于修改序列对象的定义,以及ALTER TABLE中涉及的锁定模式、类型表转换等操作。每个ALTER语句的语法、用法、限制及示例都得到了详尽的阐述,展示了对数据库对象进行精细化管理的方法。
摘要由CSDN通过智能技术生成

 ALTER ROUTINE 语句

使用 ALTER ROUTINE  语句更改先前定义的用户定义的例程(UDR)的例程修饰符或路径名。该 语句是 SQL ANSI/ISO  标准的扩展。

语法

元素

描述

限制

必须在数据库中注册。如果该 名称没有唯一地标识例程,您 必须为 parameter_type输入 一个或多个相应值

必须与 routine定义中的数  据类型相同(并以相同的顺序 指定)

语法

routine

要修改的用户 定义的例程

标识符

parameter_type

参数的数据类 

数据类型

用法

ALTER ROUTINE  语句使您可以修改先前定义的 UDR  以调整其性能, 方法是修改该 UDR  如何  执行的特征。您也可以添加或替换相关的 UDR  ,它们为优化程序(可以提高性能)提供了其它选 择。

此语句在您不知道 UDR  是用户定义的函数还是用户定义的过程时很有用。当您使用词语时,数据 库服务器会更改相应的用户定义的过程或用户定义的函数。

所有的修改在该 UDR  下一次调用时生效。

只有 UDR  所有者或 DBA  可以使用 ALTER ROUTINE  语句。

限制

如果该名称没有唯一地标识 UDR  ,您必须为 parameter_type  输入一个或多个相应值。

当您使用词语时, UDR 的类型必须是确定的。您指定的 UDR 必须指定用户定义的函数或用户定义 的过程。如果存在以下任何一种情况,则数据库服务器会返回一条错误:

         您指定的名称(和参数) 同时适用于用户定义的过程和用户定义的函数。

         您指定的特定名称同时适用于用户定义的函数和用户定义的过程。

引用修改的关键字

使用这些关键字在 UDR  中引入您想要修改的项:

关键字

作用

ADD

 UDR 添加一个例程修饰符

DROP

 UDR 删除例程修饰符

MODIFY

更改例程修饰符的属性

MODIFY EXTERNAL NAME (for external routines only)

替换可执行文件的文件规范。当              IFX_EXTEND_ROLE 配置参数为 ON 时,此选项  只对被 DBSA 授予 EXTENT 角色的用户有效。   IFX_EXTEND_ROLE 配置参数为 OFF 时, UDR 所有者或 DBA 可以使用此选项。

WITH

引入所有修改

如果例程修饰符为 BOOLEAN  值, MODIFY  将该值设置为 T (相当于使用关键字 ADD  添加该

例程修饰符)。

例如: 下面这两个语句都更改了 func1 UDR ,这样它可以在可并行数据查询的环境中执行:

ALTER ROUTINE func1 WITH (MODIFY PARALLELIZABLE);

ALTER ROUTINE func1 WITH (ADD PARALLELIZABLE);

更改例程修饰符示例

假设您有一个外部函数 func1 ,它设置为处理 NULL  值,并且每次调用的成本设置为 40 。以下 ALTER ROUTINE  语句通过删除处理 NULL  值的能力而调整该函数的设置, 通过将每次调用的成 本更改为 20 而调整 func1 ,并指示该函数可以并行执行:

ALTER ROUTINE func1(CHAR, INT, BOOLEAN)

WITH (

DROP HANDLESNULLS,

MODIFY PERCALL_COST = 20,

ADD PARALLELIZABLE

);

因为名称 func1 对数据库来说不是唯一的,所以指定了数据类型参数, 这样例程特征符就是唯一 的。如果此函数在创建时指定了一个特定名称(例如, raise_sal), 您可以使用下面的第一行标 识该函数:

ALTER SPECIFIC ROUTINE raise_sal;

2.10 ALTER SECURITY LABEL COMPONENT 语句

使用 ALTER SECURITY LABEL COMPONENT  语句向当前数据库中的一个现有的安全标签构件中 添加一个或多个元件。该语句是 SQL ANSI/ISO  标准的扩展。

语法

元素

描述

限制

语法

component

element  添加的构件

必须在数据库中已存在

标识符

element

component

的新的元素

在必须 component 的元素中必须 唯一, 且小于 32 字节。左括号   ( )和右括号( ) )、逗号  (,)、和冒号( : )是无效的字 符

引用字符串

old_element

component

的现有的元 

必须是 component 的元素

引用字符串

用法

只有 DBSECADM  可以声明 ALTER SECURITY LABEL COMPONENT  语句,此语句定义现有安 全标签构件的新元件。新的元件称为定义在引用指定构件的 CREATE SECURITY POLICY  语句中 的安全策略的一部分。

一个安全标签构件由不多于 64   elements  的集合组成, 它们由 CREATE SECURITY LABEL       COMPONENT  语句定义为字符串常量。每个字符串常量不多于 32  字节, 而且必须在该构件的元 件中是唯一的。每个元件的声明(是构件具有的有效值) 定义数据的敏感度的类别。通过向现有构 件中添加新的元件, ALTER SECURITY LABEL COMPONENT  语句扩展了构件在包含该成分的安 全策略内或在支持安全策略的安全标签内的可具有的值的设定。

 ALTER SECURITY LABEL COMPONENT 语句运行成功后,  GBase 8s 更新以下当前数据库中系统目

录的表:

         sysseclabelcomponentelements  表,向该构件的新元件中添加新行,

         sysseclabelcomponents  表,显示构成该修改的安全构件的安全元件的新基数。

此语句可以定义一个安全标签构件的新元件, 但是不能修改或伤处现有的元件。如果安全设计变  更,以致于需要不同的元件,那么 DBSECADM  可以添加新的元件(如果元件的总数量保持在大 小和基数的限制内, 且不使用包含在该构件中的定义的表中的任何过时的元件)。

或者,  DBSECADM  可以使用 DROP SECURITY LABEL COMPONENT  元件删除此构件,然后使  CREATE SECURITY LABEL COMPONENT  元件重新定义新的构件, 新的构件只包含必须的元 件。然而, 如果此构件是现有安全策略的一部分, 则您不能删除此安全构件。有关删除安全标签构 件和其它 GBase 8s  安全对象的限制,请参阅 DROP SECURITY  语句 

要添加新元件的安全标签构件必须是三种构件类型之一。跟随在 component  名称之后的        ARRAY  SET   TREE  关键字指定的构件类型必须与最初定义构件时 CREATE SECURITY     LABEL COMPONENT  语句指定的构件类型相同。指定元件的新列表依赖于该指定的构件是否为 ARRAY  SET   TREE  类型,这三种类型是 GBase 8s  支持的三种安全构件的类型。

ADD ARRAY 子句

ARRAY  类型的安全标签组件是超过 64  个元素的有序集合。声明数组元素的顺序很重要, 因为它 定义了数据敏感性的降序,每个连续的元素在数据敏感性上都低于前面的元素。数组的标签元素集 及其逗号( ,  )分隔符必须放在一对括号( [ ... ])内。相同的新元素不能在同一 ADD           ARRAY  子句中声明多次。

 ADD ARRAY  子句中, BEFORE   AFTER  关键字必须跟随在新元件(或以逗号分隔的新元  件的列表) 之后按数据敏感度降序指定新元件的位置。在对元素大小和数量的限制中, 此语法使   DBSECADM  能够在数组中任何位置(包括最高位置和最低位置) 或在连续的现有元素之间插入新 元素。然而,如果 ADD ARRAY  子句的 BEFORE   AFTER  关键字指定了之前未定义的数组元 素(无论是在创建数组组件时, 还是在先前的 ALTER SECURITY LABEL COMPONENT  语句    ), ALTER SECURITY LABEL COMPONENT  语句都会失败并显示错误。

如果在同一个 ARRAY  类型的构件中执行了多个 ALTER SECURITY LABEL COMPONENT  操作 以添加新元件,  由于数组元件的编码方式, DBSECADM  可能无法到达 64  组元件的最大值。有 关安全元件是如何编码的信息, 请参阅 GBase 8s  安全指南 

以下示例定义了一个 ARRAY 类型的安全标签构件 aquilae ,它是五个元件的顺序集,  imperator 在数据敏感度中是最高的,最低的是 asinus 。随后的 ALTER SECURITY LABEL COMPONENT 语句添 加了两个新元件:

         称为 legatus  的新元件排列在 imperator   tribunus  之间

         称为 cunctator  的新元件排列在 asinus  之后,作为数据敏感度的新的最低一级。

CREATE SECURITY LABEL COMPONENT aquilae

ARRAY [ "imperator", "tribunus", "centurio", "miles", "asinus" ];

ALTER SECURITY LABEL COMPONENT aquilae

ADD ARRAY [ "legatus" BEFORE "tribunus","cunctator" AFTER "asinus" ];

 ALTER SECURITY LABEL COMPONENT ... ADD ARRAY  语句的成功运行修改了 aquilae  全标签构件组, 因此构件元件新的降序顺序为: imperator 、legatus 、tribunus 、centurio  miles 、asinus 、cunctator

ADD SET  子句

SET  类型的安全标签构件是不多于 64  个元件的无序集合。 SET  构件中的元件的声明的顺序是没 有意义的。数组元件的集合以及它们的逗号分隔符必须用一对大括号( {  ... })括起。在同一 ADD SET  子句中, 同一新 element  只能声明一次。

以下示例定义了一个 SET 类型的安全标签组件 departments ,它是三个元件的无序集合,这三个 元件为 Marketing HR  Finance 。随后被 ALTER SECURITY LABEL COMPONENT 语句以添加三  个新元件 Training QA  Security 的方式修改:

CREATE SECURITY LABEL COMPONENT departments

SET {  'Marketing', 'HR', 'Finance' };

ALTER SECURITY LABEL COMPONENT departments

ADD SET {  'Training', 'QA', 'Security' };

不像 ADD ARRAY   ADD TREE  规范,因为 SET  类型的构件的元件没有隐式的数据敏感度的 顺序, 所以 ALTER SECURITY LABEL COMPONENT   ADD SET  操作在重定义的构件的新的 和现有元件中的不创建多于少于数据敏感度关系。

ADD TREE 子句

TREE  类型的安全标签构件具有没有循环的简单图的逻辑拓扑。每个 TREE  构件都有单独的根节 点和不多于 63  个的附加节点。 ALTER SECURITY LABEL COMPONENT  语句添加到此等级的新 元件必须在根节点之下插入。每个新节点的字符串常量必须跟随在 UNDER  关键字和之前声明的 字符串常量之后。 TREE  构件的元件集合。包括它们的 UNDER  关键字和逗号分隔符必须用一对 括号( ( ... ))括起。

 UNDER  关键字之后指定的标签元素称为同一 UNDER  关键字(称为该父元素的 child)之前  的标签元素的 parent。新元件称为父元件的 child  。然而,如果 ADD TREE  子句为该构件指定了 在数据库中未定义的父元件,则 ALTER SECURITY LABEL COMPONENT  产生错误并失败。     UNDER  关键字不能跟随在一个已添加到同一 ADD TREE  子句中的构件元件之后。

指定为 TREE  组件的根节点的字符串常量具有 TREE  分层结构内所有节点的最高的数据敏感性。  TREE  中连续的父节点和子节点的任何子集中, 每个非根元素具有比其父元素或其父元素的任 何祖先低的数据敏感性, 但是具有比它的任何子元素或其子元素的后代高的数据敏感性。

当没有豁免的用户尝试访问由包括 TREE  组件的标签保护的数据时,如果此用户的安全标签不包  含符合数据行标签的同一组件的 TREE  组件中的一个元素,或者不包含符合这些元素其中之一的  祖先的元素,则读取操作失败。除非该标签的安全策略包含 OVERRIDE  子句,否则在相同情景下 写入操作也会失败。如果此数据行标签有多个 TREE  构件, 则用户安全标签必须包含与该成分的  TREE  构件的元件值匹配(或祖)元件值。

在以下示例中, ALTER SECURITY LABEL COMPONENT 元件修改了一个 TREE 构件 Oakland ,修改方 式为添加两个新节点到用它 CREATE SECURITY LABEL COMPONENT 语句定义的六个节点的树结构    中:

CREATE SECURITY LABEL COMPONENT Oakland

TREE ( 'Port' ROOT,

'Downtown' UNDER 'Port',

'Airport' UNDER 'Port',

'Estuary' UNDER 'Airport',

'Avenues' UNDER 'Downtown',

'Hills' UNDER 'Avenues');

ALTER SECURITY LABEL COMPONENT Oakland

ADD TREE ( 'Uptown' UNDER 'Port',

'Bay' UNDER 'Estuary');

这里新的 Uptown 节点是 Port 的子节点, Port 有最高的数据敏感度, 因为它是根节点。新的   Bay 节点是 Estuary 的子节点, Estuary  Airport 的子节点, Airport  Port 的子节点,  此表明 Bay 在此等级的三个节点中具有较低的数据敏感度。实际上,它不像任何被标记为 Port  数据, 而是归类到较低的级别。 Port 值可用作标签分配给允许存取所有关于此 Port 数据的用   户。

如果此示例中的 ALTER SECURITY LABEL COMPONENT  语句成功, 且随后定义的数据行标签指  Bay  作为 Oakland  构件的值,对安全策略不具有豁免权的用户在尝试在一个查询中读取受保   护的表时, 它需要 Port  Airport  Estuary   Bay 其中之一作为安全,  没有此安全策略的豁免  的用户尝试读取查询中受保护的行时则需要将 Port  Airport  Estuary   Bay  作为用户标签值 以满足此数据行标签的组件。因为它们不符合 Bay  且不是 Bay  的祖,所以此用户标签中的该构件  Uptown   Downtown  值不满足。对于读取受保护的行的查询, 该用户的安全标签包含满足此 行安全标签的任何其它构件的值,且该用户也持有对此表的 Select  存取权限,以及至少对包含该  保护的行的数据库的 Connect  存取权限。

ADD TREE  子句无法在现有子节点和其父节点之间插入一个新的节点。

2.11 ALTER SEQUENCE 语句

使用 ALTER SEQUENCE   句修改序列对象的定义。该语句是 SQL ANSI/ISO  标准的扩展。

语法

元素

描述

限制

语法

max

值的新上限

必须为 > CURRVAL 

restart 的整数

精确数值

min

值的新下限

必须为 < CURRVAL 

restart 的整数

精确数值

owner

sequence 的所有 者

不能被此语句更改

所有者名称

restart

序列中新的第一 个值

必须是在 INT8 范围内的整 数

精确数值

sequence

现有序列的名称

必须存在。不能是同义词

标识符

size

内存中要预分配 的值的新数目

大于 > 2  < 一个循环中 的基数(= |(max -

min)/step|)

精确数值

step

连续值之间的新 的间隔

必须是非零整数

精确数值

用法

ALTER SEQUENCE  语句可以修改 syssequences  系统目录表中指定的序列对象的定义。

ALTER SEQUENCE  重新定义了现有的序列对象。它只影响随后生成的值(和序列高速缓存中任何 未使用的值)。您不能使用 ALTER SEQUENCE  语句重命名序列, 也不能更改序列的所有者。

要修改一个序列的定义, 您必须是其所有者或 DBA  或具有对该序列的 Alter  权限。只会修改您在 ALTER SEQUENCE  语句中显式指定的序列定义的元素。如果您做出矛盾的更改(例如同时指定   MAXVALUE   NOMAXVALUE,或同时指定 CYCLE   NOCYCLE  选项),则会发生错误。

示例

以下示例基于随后的序列对象和表:

CREATE SEQUENCE seq_2

INCREMENT BY 1 START WITH 1

MAXVALUE 30 MINVALUE 0

NOCYCLE CACHE 10 ORDER;

CREATE TABLE tab1 (col1 int, col2 int);

INSERT INTO tab1 VALUES (0, 0);

INSERT INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL)

SELECT * FROM tab1;

col1

0

1

col2

0

1

ALTER SEQUENCE seq_2

RESTART WITH 5

INCREMENT by 2

MAXVALUE 300;

INSERT INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL)

INSERT INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL)

SELECT * FROM tab1;

col1

0

1

5

7

col2

0

1

5

7

INCREMENT BY 选项

使用 INCREMENT BY  选项指定一个序列中连续数字之间的新间隔。间隔(或 step  值) 可以 INT8  范围内的一个正整数(对递增顺序) 或负整数(对递减顺序)  BY  关键字是可选的。

RESTART WITH  选项

使用 RESTART WITH  选项指定该序列的新的第一个数字。如果使用 ALTER SEQUENCE  语句指 定了 min   max  值,则 restart 值必须是 INT8  范围内的整数, 它大于等于 min  值(对于递增 顺序 或小于等于 max  值(对于递减顺序)。 WITH  关键字是可选的。

当您使用 RESTART  选项修改序列时, restart 值存储在 syssequences  系统目录表中,直到       NEXTVAL  操作中第一次使用该序列对象。在此以后,该值就在系统目录中复位。使用 dbschema 实用程序可以递增数据库中的序列对象, 从而在生成的数字中产生间隔,您可能不希望这些数字在 需要序列化整数的应用程序中出现。

MAXVALUE   NOMAXVALUE  选项

使用 MAXVALUE  选项指定序列中值的新的上限。最大值(或 max  )必须是 INT8  范围内的整 数,它大于 sequence.CURRVAL   restart (或者,如果未指定 restart  ,则大于原 CREATE     SEQUENCE  语句中的 origin  )。

使用 NOMAXVALUE  选项,以用新的缺省最大值(对递增顺序为 2e64;对递减顺序为 - 1)替换 当前的限制值。

MINVALUE   NOMINVALUE  选项

使用 MINVALUE  选项指定序列中值的新下限。最小值(或 min)必须是 INT8  范围内的整数, 它小于 sequence.CURRVAL   restart  (或者, 如果未指定 restart  ,则小于原 CREATE           SEQUENCE  语句中的 origin  )。

使用 NOMINVALUE  选项以用缺省值(对于递增顺序为 1;对于递减顺序为 -(2e64))替换当前下 限。

CYCLE   NOCYCLE  选项

使用 CYCLE  选项替换 NOCYCLE  属性,在序列到达最大(升序) 或最小(降序) 限制值后继续 生产序列值。在递增顺序到达 max  后,它为下一个值生产 min  值。在递减顺序到达 min  后,  为下一个值生产 max  值。

使用 NOCYCLE  选项可防止序列在到达声明的限制值之后生成更多的值。一旦序列到达该限制 值,对 sequence.NEXTVAL  的下一次引用将返回一条错误消息。

CACHE   NOCACHE  选项

使用 CACHE  选项指定在内存中预分配以快速访问的序列值的新数目。高速缓存大小必须是在   INT  范围内的整数,它小于循环中的个数(或小于 (|max - min)/step|)。最小大小为 2 个预分配 的值。

使用 NOCACHE  在内存中不预分配值。(另见 CREATE SEQUENCE  语句 中有关 SEQ_CACHE_SIZE  的描述。 )

ORDER   NOORDER  选项

这些关键字对序列的行为没有影响。序列始终以用户请求的顺序向用户发出值,就像 ORDER   键字是始终指定的一样。但是, ALTER SEQUENCE  语句接受 ORDER   NOORDER  关键字, 以同在 SQL  的其它方言中序列对象的实现相兼容。

2.12 ALTER TABLE 语句

使用 ALTER TABLE  语句修改现有表的结构。

(要修改表的存储分布策略,您必须使用 ALTER FRAGMENT  语句而不是 ALTER TABLE   句。)

语法

基本表选项

元素

描述

限制

语法

synonym

要更改的表的同义词

同义词及其表必须存在;  USETABLENAME 必须未设置

标识符

table

要更改的表的名称

在当前数据库中必须存在

标识符

语法

GBase 8s  数据库服务器按您在 ALTER TABLE  语句中指定的顺序执行操作。如果任一操作失败, 那么整个操作将被取消。

ALTER TABLE  语句不能向一个未分片表中添加分片存储策略,也不能修改分片表的存储分片策 略。有关添加、修改或删除表的分片存储策略的信息,请参阅 ALTER FRAGMENT  语句 

更改视图依赖的表可能会使得视图无效。

警告:  此语句可用的子句对性能的影响各不相同。采取更改操作之前, 请检查 GBase 8s 性能指   更改表定义 中相应章节来检查影响和策略。

您可以使用 Basic Table Options  段修改表的结构, 方法是添加、修改或删除列和约束, 或更改    extent  大小或锁定表的粒度。数据库服务器按您指定的顺序执行更改。如果任一动作失败, 那么整 个操作将会取消。

 GBase 8s  ,您可以将表与已命名的 ROW  类型关联, 或指定新的存储空间以存储大对象数据。 您也可以添加或删除 rowid  列或隐藏列以支持辅助服务器更新 USELASTCOMMITTED  功能的操 作。然而, 您不能与其他任何更改一起指定这些选项。

Logging TYPE  选项

使用 Logging TYPE  选项指定该表具有特殊特性, 以提高对它的各种批量操作。

Logging TYPE  选项

这里 STANDARD  CREATE TABLE  语句的缺省选项 ,指定日志记录表, RAW  指定非日志记 录表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值