---
title: "plsql_can_transform_sql_to_assign - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: plsql_can_transform_sql_to_assign 说明 对于 V4.4.X 版本，该变量从 V4.4.2 版本开始引入。 对于 V4.6.X 版本，该变量从 V4.6.0 版本开始引入。 plsql_can_transform_sql_to_assign 用于控制 PL 内的 select into…
---
切换语言

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

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

# plsql_can_transform_sql_to_assign

更新时间：2026-06-25 15:50:07

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/800.configuration-items-and-system-variables/200.system-variable/300.global-system-variable/10920.plsql_can_transform_sql_to_assign-global.md)

#### 说明

对于 V4.4.X 版本，该变量从 V4.4.2 版本开始引入。  
对于 V4.6.X 版本，该变量从 V4.6.0 版本开始引入。

`plsql_can_transform_sql_to_assign` 用于控制 PL 内的 `select into from dual` 是否允许被改写为 `assign` 语句。

## 权限要求

- 查询变量

  `sys` 租户和所有用户租户均可以使用 `SHOW VARIABLES` 语句或视图 `SYS.TENANT_VIRTUAL_SESSION_VARIABLE`（Oracle 模式）及视图 `information_schema.SESSION_VARIABLES`（MySQL 模式）查看 Session 系统变量的值。
 - 修改变量

  `sys` 租户和所有用户租户均可以直接修改本租户的 Session 系统变量的值。

## 属性说明

| **属性** | **描述** |
| --- | --- |
| 参数类型 | Bool |
| 默认值 | OFF |
| 取值范围 | ON/OFF |
| 是否可修改 | 是，支持通过 `SET` 语句修改。 |
| 是否重启 OBServer 节点生效 | 否，设置后立即生效。 |

## 使用说明

该变量控制 PL 内的 `select into from dual` 是否允许被改写为 `assign` 语句。默认为 `OFF` 表示不会做改写。当变量为 `ON` 时，内核会尝试自动改写，改写成功后预期会提高执行性能。由于改写会修改 PL 的语句组成，造成优化前后编译生成的产物不一致，因此该变量会影响 PL cache 的匹配。

## 使用示例

执行如下命令，关闭 `plsql_can_transform_sql_to_assign` 变量：

```shell
obclient> SET plsql_can_transform_sql_to_assign = OFF;

```

执行如下命令，创建一个名为 `func` 的存储函数：

```shell
obclient> create or replace function func(a int)  return int is
        x int;
        begin
        select a into x from dual;
        return x;
        end;
        /

```

调用 `func` 存储函数，发现耗时 9.147 秒：

```shell
obclient> SELECT func(level) FROM dual connect by level < 10000;
cost : 9999 rows in set (9.147 sec)

```

执行如下命令，开启 `plsql_can_transform_sql_to_assign` 变量：

```shell
obclient> SET plsql_can_transform_sql_to_assign = ON;

```

再次调用 `func` 存储函数，发现耗时 1.445 秒：

```shell
obclient> select func(level) from dual connect by level < 10000;
cost : 9999 rows in set (1.445 sec)

```

开启优化后，性能显著提升。

 上一篇 下一篇 ![有帮助](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) 咨询热线
