---
title: "用户自定义变量 | OceanBase 文档中心"
description: "用户自定义变量 存储在用户自定义的变量中的值，可以被其他语句引用，以实现将值从一个语句传递到另一个语句。 用户变量的书写格式为 @var_name ，其中变量名 var_name 由字母、数字、 . 、 _ 和 $ 组成。 如果将用户变量名称引用为字符串或标识符（例如，@&#x27;my-obvar&#x27;、@&quot;my-obvar&quot; …"
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.1.4 社区版

# 用户自定义变量

更新时间：2023-08-07 17:30:26

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V3.1.4/zh-CN/1400.developer-guide/700.sql-reference/100.elements/600.user-defined-variables.md)  

存储在用户自定义的变量中的值，可以被其他语句引用，以实现将值从一个语句传递到另一个语句。

用户变量的书写格式为 `@var_name`，其中变量名 `var_name` 由字母、数字、`.`、`_` 和 `$` 组成。 如果将用户变量名称引用为字符串或标识符（例如，@'my-obvar'、@"my-obvar" 或 @`my-obvar`），则该名称可以包含其他字符。用户变量名不区分大小写，名称的最大长度为 64 个字符。

用户自定义变量只用于指定会话。一个客户端定义的用户变量对其他客户端不可见或不可使用。当该客户端退出时，将自动释放指定客户端会话的所有变量。

设置用户定义变量的一种方法是使用 `SET` 语句：

```sql
SET @var_name = expr [, @var_name = expr] ...

```

详细信息，请参见 [SET](https://www.oceanbase.com/docs/community-observer-cn-10000000000449852)。

对于 `SET` 语句，`=` 或 `:=` 都可以用作赋值运算符。

可以为用户变量分配以下数据类型的值：整数、十进制、浮点、二进制或非二进制字符串，或 `NULL` 值。十进制和实数值的赋值不会保留值的精度或小数位数。其他数据类型的值被转换为允许的数据类型。例如，时间或空间数据类型的值被转换为二进制字符串。

要读取一个用户自定义变量，可以使用 `SELECT` 语句。

如果为用户变量分配了非二进制（字符）字符串值，则它具有与字符串相同的字符集和字符序。分配给用户变量的十六进制或位值被视为二进制字符串。要将十六进制或位值作为数字分配给用户变量，可以添加 0 或使用 `CAST` 函数 `CAST(... AS UNSIGNED)`：

```sql
obclient> SET @v1 = X'43';
obclient> SET @v2 = X'43'+0;
obclient> SET @v3 = CAST(X'43' AS UNSIGNED);
obclient> SELECT @v1, @v2, @v3;
+------+------+------+
| @v1  | @v2  | @v3  |
+------+------+------+
| C    |   67 |   67 |
+------+------+------+
1 row in set

obclient> SET @v1 = b'1000011';
obclient> SET @v2 = b'1000011'+0;
obclient> SET @v3 = CAST(b'1000011' AS UNSIGNED);
obclient> SELECT @v1, @v2, @v3;
+------+------+------+
| @v1  | @v2  | @v3  |
+------+------+------+
| C    |   67 |   67 |
+------+------+------+
1 row in set

```

如果在结果集中选择了用户变量的值，则将其作为字符串返回给客户端。如果引用未初始化的变量，则它的值为 `NULL` 且类型为字符串。

除了 `SET` 语句，不建议在其他语句中为用户变量赋值并在同一语句中读取该值。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
