返回首页

gbase数据、南大通用产品文档:GBase8a创建事件

更新日期:2024年09月11日

语法格式
CREATE [DEFINER = { user | CURRENT_USER }] EVENT
[IF NOT EXISTS]
ON SCHEDULE
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[GLOBAL | LOCAL]
[COMMENT 'comment']
DO event_body;
schedule:
AT
timestamp
[+
INTERVAL
interval]
...
|
EVERY
interval
[STARTS
timestamp
[+
INTERVAL
interval]
...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity { YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |WEEK |
SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND |
HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND }
表5- 204 参数说明
字段名称
含义说明
event_name
创建的event 名字(唯一确定的)
ON SCHEDULE
计划任务。
schedule
决定event 的执行时间和频率(注意时间一定要是将来的时
间,过去的时间会出错),有两种形式AT 和EVERY。
[ON
COMPLETION
[NOT] PRESERVE]
可选项,默认是ON COMPLETION NOT PRESERVE,即计
划任务执行完毕后自动
drop
该事件;ON
COMPLETION PRESERVE 则不会drop 掉。
COMMENT
'comment'
可选项,comment 用来描述event;相当于注释,最大长度
64 个字节。
[ENABLE
|
DISABLE]
设定event 的状态,默认ENABLE:表示系统尝试执行这个
事件,DISABLE:关闭该事件,可以用alter 修改。
[GLOBAL | LOCAL]
GLOBAL 表示各节点独占执行,LOCAL 表示各节点独立执

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1457
字段名称
含义说明

DO event_body
需要执行的sql 语句(可以是复合语句)。CREATE EVENT
在存储过程中使用是合法的。
注意

默认创建事件存储在当前库中,
也可显示指定事件创建在哪个库
中;

通过show events 只能查看当前库中创建的事件;

事件执行完即释放,如立即执行事件,执行完后,事件便自动删
除,多次调用事件或等待执行事件可以查看到;

如果两个事件需要在同一时刻调用,gbase 会确定调用他们的顺
序,如果要指定顺序,需要确保一个事件至少在另一个事件1 秒后
执行;

对于递归调度的事件,结束日期不能在开始日期之前;

select 可以包含在一个事件中,然而他的结果消失了,就好像没
执行过;

创建事件时不支持LOAD 语句;

event 不支持procedure、function、trigger 等对象的创建。
示例
创建测试表:
gbase> DROP TABLE IF EXISTS events_list;
gbase> CREATE TABLE events_list(event_name VARCHAR(20) NOT NULL, ev
ent_started TIMESTAMP NOT NULL);
创建事件1(立即启动事件):
CREATE EVENT event_now
ON SCHEDULE
AT NOW()
DO insert into events_list values('event_now', now());
查看事件执行结果:
gbase> select * from events_list;
+------------+---------------------+
| event_name | event_started
|
+------------+---------------------+
| event_now | 2017-07-01 04:06:40 |
+------------+---------------------+
创建事件2(每分钟启动事件):

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1458
CREATE EVENT test.event_minute
ON SCHEDULE
EVERY 1 MINUTE
DO insert into events_list values('event_now', now());
查看事件执行结果:
gbase> SELECT * FROM events_list;
+-------------+---------------------+
| event_name | event_started
|
+-------------+---------------------+
| event_now | 2017-07-01 04:26:53 |
| event_now | 2017-07-01 04:27:53 |
| event_now | 2017-07-01 04:28:53 |
+-------------+---------------------+

PG_VIEWS
PG_VIEWS 视图提供访问数据库中每个视图的有用信息。
名称
类型
引用
描述
schemaname
name
PG_NAMESPACE.nspname
包含视图的模式名。
viewname
name
PG_CLASS.relname
视图名。
viewowner
name
PG_AUTHID.Erolname
视图的所有者。
definition
text
-
视图的定义。

当需要根据 SPL 变量或单一表达式的值从许多分支中取用一个时,使用 CASE
语句。CASE 语句是对 IF 语句的快速替换。
语法

ELSE 子句

元素
描述
限制
语法
constant_expr
指定精确
值的表达

必须是精确数值、引用字符串、精确
日期时间或精确时间间隔。数据类型
必须与数据 value_expr 相一致
常量表
达式
value_expr
返回值的
表达式
SPL 变量或者返回值或 NULL 的其它
类型的表达式。该数据类型不能是大
对象(BLOB 、BYTE 、CLOB 、
TEXT)、集合或者用户定义的 OPAQUE
或 DISTINCT 类型。在内置 OPAQUE
类型中,只有 BOOLEAN 和 LVARCHAR
是有效的。
表达式
用法

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1186
可以使用 CASE 语句在 SPL 例程中创建一组条件分支。WHEN 和 ELSE 子句
都是可选的,但您必须提供其中一个或另一个。如果既不指定 WHEN 子句也不
指定 ELSE 子句。则会收到语法错误消息。

如果不包含 WHEN 子句也不包含 ELSE 子句,则 CASE 语句由于语法
错误而失败。

如果不包含 ELSE 子句,但是 WHEN 子句没有指定一个与 value_expr
相匹配的 constant expr t,则 CASE 语句在例程执行时产生错误 -26062
并失败。
不要将 CASE 语句和 SQL 的 CASE 表达式混淆。(CASE 表达式支持作为
CASE 语句的同一关键字。但是使用不同的语法和语义计算指定的 conditions 。
CASE 表达式会返回一个值或 NULL,如 CASE 表达式 中描述。)
数据库服务器如何执行 CASE 语句
数据库服务器按一下操作的顺序的执行 CASE 语句:

数据库服务器计算 value_expr 表达式。

如果得到的值与在 WHEN 子句的 constant_expr 参数中指定的精确值相
匹配,则数据库服务器执行跟随该 WHEN 子句中的 THEN 关键字的语
句块。

如果计算 value_expr 参数得到的值与多个 WHEN 子句中的
constant_expr 参数相匹配,则数据库服务器执行跟随 CASE 语句中第一
个匹配的 WHEN 子句中 THEN 关键字的语句块。(在这种情况中,
WHEN 子句的词法顺序可以确定 CASE 语句的结果。)如果数据库服务
器执行了跟随在 THEN 关键字之后的 GOTO 语句,则数据库服务器将
程序控制传递给指定的语句标签。否则,数据库服务器执行 SPL 例程中
标识当前 CASE 语句结束的 END CASE 关键字后面的下一个 SPL 语句
或 SQL 语句。

如果 value_expr 参数计算的值与任何 WHEN 子句的 constant_expr 参
数中指定的精确值不匹配,并且如果 CASE 语句包含 ELSE 子句,则数
据库服务器执行跟随在 ELSE 关键字的语句块。如果数据库服务器执行
了跟随在 ELSE 关键字之后的 GOTO 语句,则数据库服务器将程序控制
传递给指定的语句标签。否则,数据库服务器执行 SPL 例程中标识当前

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1187
CASE 语句结束的 END CASE 关键字后面的下一个 SPL 语句或 SQL
语句。

如果 value_expr 参数计算的值与任何 WHEN 子句的 constant_expr 参
数中指定的精确值不匹配,并且如果 CASE 语句不包含 ELSE 子句,则
数据库服务器发出异常,并且 CASE 语句失败,错误 -26062。SPL 例程
是否终止或继续执行取决于其异常处理逻辑。
CASE 语句的此实现非常类似于GBase 8s Parallel Server 的实现,除了当未指定
ELSE 子句且没有 WHEN 子句与 value_expr 参数相匹配时,GBase 8s Parallel
Server 不会发生错误。在这种情况下,程序执行将在紧跟 CASE 语句之后的
SPL 或 SQL 语句中继续。
更随 THEN 或 ELSE 关键字的语句块可以包括在 SPL 例程的语句块中有效的
任何 SQL 语句或 SPL 语句。有关更多信息,请参阅语句块。
在 CASE 语句中值表达式的计算
数据库服务器仅计算一次 value_expr 参数的值。它在开始执行 CASE 语句时计
算此值。如果该参数中的指定表达式包含一个或多个 SPL 变量。并且这些变量中
的任何变量的值随后在 CASE 语句中的一个语句块中修改,则数据库服务器不会
重新计算 value_expr 参数的值。因此,在 value_expr 参数中指定的变量值的任
何更改都不好影响 CASE 语句采用的分支。
CASE 语句的示例
在以下示例中,CASE 语句根据另一个命名为 i 的 SPL 变量的值将 SPL 变量
集合(命名为 j 、k 、l 和 m)之一初始化为命名为 x 的 SPL 变量的值:
CASE i
WHEN 1 THEN LET j = x;
WHEN 2 THEN LET k = x;
WHEN 3 THEN LET l = x;
WHEN 4 THEN LET m = x;
ELSE
RAISE EXCEPTION 100; --invalid value
END CASE;

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1188
此处每个 WHEN 子句指定一个整数作为它的常量表达式,假设值表达式具有数
据类型。(如果这些精确值已用引号分隔,则数据库服务器将它们视为字符
值。)
下面的示例包含 WHEN 子句中对 NULL 的测试,其表达式的值和常量表达式的
数据类型为 CHAR(1):
CREATE PROCEDURE case_proc( )
RETURNING CHAR(1);
DEFINE grade CHAR(1);
LET grade = 'D';
CASE grade
WHEN 'A' THEN LET grade = 'a';
WHEN 'B' THEN LET grade = 'b';
WHEN 'C' THEN LET grade = 'c';
WHEN NULL THEN LET grade = 'z';
ELSE LET grade = 'd';
END CASE;
RETURN grade;
END PROCEDURE;