GBase 8s 内置 SPL 过程使数据库管理者在用户连接数据库或从数据库断开连接时,自动执行 SQL 和SPL 语句。
只有 DBA 或用户 gbasedbt 可以创建、更改或删除这些例程。
使用 SYSDBOPEN 和 SYSDBCLOSE 过程
要为一个或多个会话设置初始环境,创建 sysdbopen() SPL 过程。该过程影响初始化会话的属性。
只要用户成功发出 DATABASE 或 CONNECT 语句以显式连接到数据库,就会执行 sysdbopen 过程。
但是当连接到本地数据库的用户调用远程 UDR 或执行通过使用 database:object or database@server:object 符号引用远程数据库对象 DML 操作是不会在远程数据库中调用 sysdbopen 过程。
还可以创建 sysdbclose SPL 过程,当用户发出 CLOSE DATABASE 或 DISCONNECT 语句从数据库断开连接时执行此过程。
不接受参数和返回值。sysdbopen 和 sysdbclose 过程需在对应库下创建,DBA 可以创建以下四个类别的 sysdbopen 和 sysdbclose 过程。
过程名 | 描述 |
---|---|
user.sysdbopen | 指定的 user 打开当前数据库打开时执行此过程 |
public.sysdbopen | 如果没有应用 user.sysdbopen 过程,那么当前数据库打开时执行此过程。 |
user.sysdbclose | 指定的 user 关闭数据库时执行此过程 |
public.sysdbclose | 如果没有应用 user.sysdbclose 过程,则当用户关闭数据库服务器或从数据库服务器断开连接或结束会话时执行此过程。 |
例如,用户连接数据库即设置Oracle模式:
CREATE PROCEDURE public.sysdbopen()
set environment sqlmode 'oracle';
END PROCEDURE;
删除该 sysdbopen 过程:
set environment sqlmode 'gbase';
drop procedure public.sysdbopen;