返回首页

gbase数据、南大通用产品文档:GBase8sBEFORE 和 AFTER 触发操作

更新日期:2024年09月11日

在触发事件之前或之后发生的触发操作仅执行一次。BEFORE 触发操作在触发语句之前执
行,即在触发器事件发生之前执行,AFTER 触发操作在触发语句操作完成之后执行。即使
触发语句不处理任何行,BEFORE 和 AFTER 触发操作也会执行。
除其它用法外,
还可以使用 BEFORE 和 AFTER 触发操作来确定触发语句的效果。
例如,
在更新 items 表的 quantity 列之前,可以调用 SPL 例程upd_items_p1 来计算表中所有项的
订购总数,如下例所示,该过程将总数存储在名为 old_qty 的全局变量中。
CREATE PROCEDURE upd_items_p1()
DEFINE GLOBAL old_qty INT DEFAULT 0;
LET old_qty = (SELECT SUM(quantity) FROM items);
END PROCEDURE;
在完成触发更新之后,可以再次计算总数来看看更改了多少。下面的 SPL 例
程 upd_items_p2 再次计算了 quantity 的总数并将结果存储在局部变量 new_qty 中。然后,
它将 new_qty 与全局变量 old_qty 相比较,以查看所有订单的总量的增长是否超过 50%。
若是,该过程将使用 RAISE EXCEPTION 语句来模拟 SQL 错误。
CREATE PROCEDURE upd_items_p2()
DEFINE GLOBAL old_qty INT DEFAULT 0;
DEFINE new_qty INT;
LET new_qty = (SELECT SUM(quantity) FROM items);
IF new_qty > old_qty * 1.50 THEN
RAISE EXCEPTION -746, 0, 'Not allowed - rule violation';
END IF
END PROCEDURE;
下列触发器调用 upd_items_p1 和 upd_items_p2 以防止对 items 表的 quantity 列点进行异常
更新:
CREATE TRIGGER up_items
UPDATE OF quantity ON items

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 341 -
BEFORE(EXECUTE PROCEDURE upd_items_p1())
AFTER(EXECUTE PROCEDURE upd_items_p2());
如果更新使得对所有项的订购总量增长超过 50%,那么 upd_items_p2 中的 RAISE
EXCEPTION 语句终止该触发器,并显示错误。当进行事务记录的数据库服务器中的触发
器发生故障时,数据库服务器会回滚超过语句和触发操作进行的更改。有关触发器发生故
障时所发生的情况的更多信息,请参阅《GBase 8s SQL 指南:语法》中的 CREATE
TRIGGER 语句。

语法说明
该方法是在用户建立表后,通过修改表定义的方法指明哪一列需要建立全文索引。

语法格式
ALTER TABLE table_name ADD FULLTEXT [INDEX] index_name(column_name)
[INDEX_DATA_PATH='path']
参数说明

table_name:表名。

index_name:索引名(索引名表级唯一, 索引名将不区分大小写)。

column_name:索引列列名,支持CHAR、VARCHAR 或TEXT 类型。

INDEX_DATA_PATH:可选项,设置索引数据路径标志。如不填写,则索引数
据保存在默认路径上。

path:索引数据存放路径,此路径应为实际已存在的路径。
示例
示例:
gbase> DROP TABLE IF EXISTS sms;
Query OK, 0 rows affected

gbase> CREATE TABLE sms (MB_No char(11),MB_Text varchar(1000) DEFAULT NULL);
Query OK, 0 rows affected

gbase> ALTER TABLE sms add fulltext index idx_t (MB_Text)
INDEX_DATA_PATH='/home/fti/';

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 928
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0

GS_THREAD_MEMORY_CONTEXT 视图统计所有的线程的内存使用情况,以
MemoryContext 节点来统计。该视图在关闭线程池(enable_thread_pool = off)时等价于
GS_SESSION_MEMORY_DETAIL 视图。当GUC 参数enable_memory_limit 的值为off 时,
本视图不可用。
其中内存上下文“TempSmallContextGroup”,记录当前线程中所有内存上下文字段
“totalsize”小于8192 字节的信息汇总,
并且内存上下文统计计数记录到“usedsize”字段中。

以在视图中,“TempSmallContextGroup”内存上下文中的“totalsize”和“freesize”是该线程中所
有内存上下文“totalsize”小于8192 字节的汇总总和,usedsize 字段表示统计的内存上下文个
数。
名称
类型
描述
threadid
text
线程启动时间+线程标识(字符串信息为timestamp.
sessionid)。
tid
bigint
线程标识。
thrdtype
text
线程类型。
contextname
text
内存上下文名称。
level
smallint
当前上下文在整体内存上下文中的层级。
parent
text
父内存上下文名称。
totalsize
bigint
当前内存上下文的内存总数,单位Byte。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
849
名称
类型
描述
freesize
bigint
当前内存上下文中已释放的内存总数,单位Byte。
usedsize
bigint
当前内存上下文中已使用的内存总数,
单位Byte;
“T
empSmallContextGroup”内存上下文中该字段含义为
统计计数。