SET CURRENT SQLID 语句
SET CURRENT SQLID 语句为 CURRENT SQLID 特殊寄存器赋值。
调用 SET CURRENT SQLID
此语句可嵌入应用程序中或者以交互方式发出。 它是可动态准备的可执行语句。 只有在DYNAMICRULES运行行为生效时,特殊注册CURRENT SQLID的值才会被用作动态SQL语句的SQL授权ID。 对于其他DYNAMICRULES行为,当前SQLID值将被忽略。
授权 SET CURRENT SQLID
指定的值必须与申请流程的授权ID之一相同。 这条规则始终适用,即使SET CURRENT SQLID作为静态SQL语句发出也是如此。 
异常:
- 如果进程的任何授权ID具有SYSADM权限,则当将“单独安全”系统参数设置为“否”时,CURRENT SQLID可以设置为任何值。 请注意,SEPARATE_SECURITY子系统参数不适用于或影响具有SYSADM安装权限的用户。
- 如果任何授权ID具有安装SYSOPR权限,则无论SEPARATE_SECURITY的值如何,CURRENT SQLID都可以设置为SYSINSTL。
当前SQLID不能设置为角色的名称。
语法 SET CURRENT SQLID
描述 SET CURRENT SQLID
根据指定的值替换当前 SQLID 的值。
除某些例外情况外,指定的值必须与申请流程的授权ID之一相等。 更多信息,请参阅 SET CURRENT SQLID授权。


除某些例外情况外,指定的值必须与申请流程的授权ID之一相等。 更多信息,请参阅 SET CURRENT SQLID授权。

- SESSION_USER或USER
- 指定 SESSION_USER(USER)特殊寄存器的值。
- string-constant
- 指定一个不超过8个字符的字符串常量,用于标识授权ID。 内容不会自动变为大写。
- 宿主变量
- 指定一个包含授权ID的主机变量的字符串常量,字符串长度不超过8个字符。 内容不会自动变为大写。

备注 SET CURRENT SQLID
- 对授权ID的影响
- SET CURRENT SQLID不会更改进程的主授权ID。
如果 SET CURRENT SQLID 语句在具有动态 SQL 行为(而非运行行为)的存储过程或用户定义函数包中执行,则 SET CURRENT SQLID 语句不会影响包中用于动态 SQL 语句的授权 ID。 动态SQL行为决定了授权ID。 更多信息,请参阅 DYNAMICRULES绑定选项。
- 对特殊寄存器的影响 当前路径
- 当特殊寄存器 PATH 的值取决于特殊寄存器 CURRENT SQLID 的值时,对特殊寄存器 CURRENT SQLID 的任何更改都不会反映在特殊寄存器 PATH 的值中,除非执行提交操作或发出 SET PATH 语句,以更改 SQL 路径,使用特殊寄存器 CURRENT SQLID 的新值。
- DRDA分类
- SET CURRENT SQLID由数据库服务器执行,因此在DRDA中归类为非本地SET语句。
示例:SET CURRENT SQLID
- 示例 1
- 将当前SQLID设置为主授权ID。
SET CURRENT SQLID = SESSION_USER; - 示例 2
- 将SQL授权ID设置为“ GROUP34 ”(该进程的授权ID之一)。
SET CURRENT SQLID = 'GROUP34';
