可在连接或访问时更改数据库服务器会话的属性,而不更改会话所运行的应用程序。如果不能修改应用程序的源代码来设置环境选项(或环境变量)或包含与会话相关的 SQL 语句(例如,由于 SQL 语句包含从供应商处获得的代码)时,该操作很有帮助。
要更改会话的属性,可为各种数据库设计定制 sysdbopen( ) 和 sysdbclose( ) 过程以支持特定用户或 PUBLIC 组的应用程序。sysdbopen( ) 和 sysdbclose( ) 过程可包含数据库服务器在数据库打开或关闭时为用户或 PUBLIC 组执行的一系列 SET、SET ENVIRONMENT、SQL 或 SPL 语句。
例如,对于 user1,可定义包含 SET PDQPRIORITY、SET ISOLATION LEVEL、SET LOCK MODE、SET ROLE 或 SET EXPLAIN ON 语句的过程,无论何时 user1 使用 DATABASE 或 CONNECT TO 语句打开数据库时,这些过程都将执行。
sysdbopen( ) 过程中由 SET ENVIRONMENT 语句指定的会话环境变量 PDQPRIORITY 和 OPTCOMPIND 的任何设置都将在整个会话期间保持。对于常规过程非持久的 SET PDQPRIORITY 和 SET ENVIRONMENT OPTCOMPIND 语句,在 sysdbopen( ) 过程包含它们时将保持。
当作为过程所有者的用户从数据库断开连接时,将运行 user.sysdbclose( ) 过程(或者此时将运行 PUBLIC.sysdbclose( ),前提是此过程存在且当前用户不具有任何 sysdbclose( ) 过程)。
在定制 sysdbopen( ) 和 sysdbclose( ) 过程中,如果在不符合 ANSI 标准的数据库中调用了例程,那么 GBase 8s 将不会忽略 UDR 所有者的名称。
有关更多信息,请参阅配置会话属性和《GBase 8s SQL 指南:语法》。