SET
📄字数 4.6K
👁️阅读量 加载中...
一、概述
SET
语句用于设置运行时参数,参数可以是系统级配置参数、连接会话级参数,或者用户自定义变量。
- 设置系统级配置参数:
- 使用
SET
语句设置系统级参数,系统参数变更影响整个集群; - 系统级参数主要包括xugu.ini系统参数配置和内置全局变量。
- 设置xugu.ini文件中参数配置时,会将新参数值写入xugu.ini文件,且不能被回滚。
- 使用
- 设置连接会话级参数:
- 会话级参数,特定于当前会话,其生命周期由会话决定;
- 使用
SET
语句设置会话级参数;会话参数参阅连接会话参数; - 使用
SET SESSION AUTHORIZATION
语句设置当前用户; - 使用
SET TRANSACTION
语句设置事务特性,包括隔离级别或访问模式; - 使用
SET AUTO COMMIT
语句设置自动提交; - 使用
SET SCHEMA
语句设置当前模式; - 使用
SET NAMES
语句设置当前会话字符集; - 使用
SET NULL
语句设置空字符串处理方式。
- 设置用户自定义变量:
- 用户自定义变量是会话级参数,特定于当前会话,其生命周期由会话决定;
- 访问任何未经定义的自定义变量都将返回一个NULL值;
- 自定义变量由一个客户端定义、其它客户端无法查看和使用;
- 自定义变量会在客户端会话结束时自动回收释放;
- 自定义变量不支持右值为一个查询语句。
二、设置系统参数
SET
语句用于整个集群范围内更改服务端系统级的配置参数。系统参数是全局变量,部分系统参数无对应的会话级参数,更改其值,会影响整个服务端的所有会话,并且立即生效。另一部分系统参数作为会话参数的初始化值,更改其值,不影响当前会话,也不影响其他已建立连接的会话,但影响后续所有会话。
2.1 语法格式
2.2 参数说明
var_name
:待设置的系统参数名。var_value
:指定参数的新值,可以是布尔类型(BOOLEN)、字符类型(VARCHAR)、整形(INTEGER)、单精度浮点型(FLOAT)。参数不同,取值范围不同。
-opt_boolean
:布尔类型。
-TRUE
、ON
:取值TRUE
。
-FALSE
、OFF
:取值FALSE
。
-SCONST
:字符类型,字符串常量。
-('-')? ICONST
:整型。
-('-')? FCONST
:单精度浮点型。opt_on_node
:节点选择。- 未指定:等效于
ON ALL NODE
,对集群中所有节点设置系统参数。 ON ALL NODE
:对集群中所有节点设置系统参数。ON LOCAL NODE
:对当前节点设置系统参数。ON NODE NODE_ID
:对指定节点设置系统参数,其中NODE_ID
为节点ID,对应系统虚表集群信息-SYS_CLUSTERS的字段 NODE_ID。
- 未指定:等效于
2.3 示例
设置系统参数 backslash_escape,是否启用反斜杠转义。
sqlSQL> SET backslash_escapes TO OFF SQL> SELECT '\'\''; Error: [E19132] 语法错误 [E19260 L1 C11] 期待符号: syntax error, unexpected invalid token, expecting end of file SQL> SET backslash_escapes TO ON SQL> SELECT '\'\''; +-------+ | EXPR1 | +-------+ | '' | +-------+
对指定节点设置系统参数 reg_command,指定节点2,打开记录SQL命令。
sqlSQL> SET reg_command TO TRUE ON NODE 2;
三、设置会话参数
会话参数即会话变量,在客户端与服务端建立连接时,在连接控制变量区中创建会话参数,赋值连接字串上的参数值,如果连接字串上未指定,则赋值系统默认值。在会话创建后,客户端可以发送命令修改会话变量。
修改会话参数,只在当前会话有效,直至再次修改为不同值,或会话结束,不影响其他连接。
3.1 语法总览
3.1.1 语法格式
3.1.2 参数说明
session_variable_clause
和AlterSetStmt
:设置会话级参数,var_name
:指定设置的参数名。var_value
:指定参数的新值。
authorization_clause
:设置当前会话用户,参见authorization_clause。transaction_clause
:设置事务隔离级别或访问模式,参见transaction_clause。auto_commit_clause
:设置是否自动提交,参见auto_commit_clause。schema_clause
:设置当前会话的模式,参见schema_clause。names_clause
:设置当前会话的字符集,参见names_clause。empty_str_clause
:设置当前会话的空字符串转NULL功能,参见empty_str_clause。
3.2 SET SESSION AUTHORIZATION
SET SESSION AUTHORIZATION
设置当前会话的用户标识符,等同于设置会话参数当前用户(session_user)。
3.2.1 语法格式
3.2.2 参数说明
user_name
:指定当前会话用户名,可以是用户标识符或字符串。
3.3.3 示例
sql
-- 创建用户usr_auth
SQL> CREATE USER usr_auth IDENTIFIED BY '123QWE!@#';
-- 查看当前会话的用户名
SQL> SELECT USER;
+--------+
| EXPR1 |
+--------+
| SYSDBA |
+--------+
-- 设置当前会话的用户为usr_auth
SQL> SET SESSION AUTHORIZATION usr_auth;
-- 查看当前会话的用户名
SQL> SHOW session_user;
+--------------+
| SESSION_USER |
+--------------+
| USR_AUTH |
+--------------+
3.3 SET TRANSACTION
SET TRANSACTION
语句设置当前事务隔离级别、事务访问模式(只读或读写)。此语句只影响当前事务,不影响其他用户或其他事务。
3.3.1 语法格式
3.3.2 参数说明
SESSION
、CHARACTERISTICS AS
:关键字可选,用于修饰关键字TRANSACTION
。opt_access_mode
:指定事务访问模式,等同于设置会话参数TRANS_READONLY。READ ONLY
:设置当前事务为只读事务,确保事务读一致性。READ WRITE
:设置当前事务为读写事务,确保事务写一致性。
opt_level
:指定事务隔离级别,等同于设置会话参数ISO_LEVEL。READ ONLY
:设置事务隔离级别为只读。READ COMMITTED
:设置事务隔离级别为读已提交。REPEATABLE READ
:设置事务隔离级别为可重复读。SERIALIZABLE
:设置事务隔离级别为序列化。
3.4 SET AUTO COMMIT
SET AUTO COMMIT
设置自动提交。等同于设置会话参数AUTO_COMMIT。
3.4.1 语法格式
3.4.2 参数说明
AUTO COMMIT
:事务的提交模式。ON
:自动提交。OFF
:非自动提交。
3.4.3 示例
打开自动提交。
sqlSQL> SET AUTO COMMIT ON;
3.5 SET SCHEMA
SET SCHEMA
设置当前会话的模式,可用于切换模式。等同于设置会话参数schema。
3.5.1 语法格式
3.5.2 参数说明
schema_name
:模式标识符或字符串。DEFAULT
:切换到当前会话所登录用户的默认同名模式下。
3.5.3 示例
sql
SQL> SET SCHEMA DEFAULT;
3.6 SET NAMES
SET NAMES
设置当前客户端、连接会话的字符集。等同于设置会话参数CHAR_SET。
3.6.1 语法格式
3.6.2 参数说明
charset_name
:字符集名的字符串,对应系统内置字符集SYS_CHARSETS,字段CHARSET_NAME
。
3.6.3 示例
设置会话字符集为GBK。
sqlSQL> SET NAMES 'GBK';
设置会话字符集为UTF8。
sqlSQL> SET NAMES 'UTF8';
3.7 SET NULL
SET NULL
语句设置服务端接收当前会话的SQL数据时,是否将空串(长度为 0 的字符串)作为空值(NULL)处理,等同于设置会话参数EMPTY_STR_AS_NULL。
3.7.1 语法格式
3.7.2 参数说明
NULL
:空串(长度为 0 的字符串)不作为空值(NULL)处理。SCONST
:空串''
或任意字符串,将空串(长度为 0 的字符串)作为空值(NULL)处理。
3.7.3 示例
设置空串(长度为 0 的字符串)不作为空值(NULL)处理。
sqlSQL> SET NULL NULL; SQL> SHOW EMPTY_STR_AS_NULL; +-------------------+ | EMPTY_STR_AS_NULL | +-------------------+ | F | +-------------------+
设置将空串(长度为 0 的字符串)作为空值(NULL)处理。
sqlSQL> SET NULL ''; SQL> SHOW EMPTY_STR_AS_NULL; +-------------------+ | EMPTY_STR_AS_NULL | +-------------------+ | T | +-------------------+
四、设置自定义会话变量
自定义会话变量支持在SQL、块语句、存储过程或函数中使用。
4.1 语法格式
4.2 参数说明
variable_el
:变量列表。var_name
:变量名。可以是字母或下划线开头的,且由大小写字母、数字、下划线、$或#中任意字符组成的的标识符。b_expr
:变量值或表达式。
4.3 示例
设置两个自定义变量 var_test1 和 var_test2,并查询变量值。
sqlSQL> SET @var_test1 = ('test1'), @var_test2 = ('test2'); SQL> SELECT @var_test1; +-------+ | EXPR1 | +-------+ | test1 | +-------+ SQL> SELECT @var_test2; +-------+ | EXPR1 | +-------+ | test2 | +-------+
设置自定义变量var_dt,赋值为当前时间。
sqlSQL> SET @var_dt = SYSDATE(); SQL> SELECT @var_dt; +--------------------------+ | EXPR1 | +--------------------------+ | 2025-08-02 16:05:31.290 | +--------------------------+