ALTER ROUTINE 语句
使用 ALTER ROUTINE 语句更改先前定义的用户定义的例程(UDR)的例程修饰符或路径名。该 语句是 SQL ANSI/ISO 标准的扩展。
语法
元素 |
描述 |
|
语法 |
|||
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 指定非日志记 录表。