---
title: 不含参数的可计算表达式抽出的 query range 错误-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于不含参数的可计算表达式抽出的 query range 错误相关的常见问题和使用技巧，帮助您快速解决不含参数的可计算表达式抽出的 query range 错误的难题。
---
切换语言

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

划线反馈

# 不含参数的可计算表达式抽出的 query range 错误

更新时间：2026-05-26 09:46

适用版本： V4.1.x 内容类型：Troubleshoot  

## 问题现象

使用 sysdate 表达式抽 query range，命中 plan cache 时结果错误。 例如：

```shell
create table t1(c1 date primary key);
select count(*) from t1 where c1 < sysdate;
insert into t1 values(sysdate);
call dbms_lock.sleep(1);
--预期返回1，实际返回0
select count(*) from t1 where c1 < sysdate;

```

## 问题原因

sysdate 的结果在一个 query 内是相同的，在不同 query 中的结果是不同的。对于这类表达式，可以抽 query range，但需要在每次命中 plan cache 后重新计算表达式的结果再生成最终的 query range。抽 query range 时判断一个表达式的结果在不同 query 中是否相同的依据是是否包含参数化的常量，导致 sysdate 抽出的 query range 每次命中 plan cache 时使用的都是计划生成时的结果。类似的表达式包含 `utc_timestamp`、`utc_time`、`utc_timestamp`、`curtime`、`user`、`host_ip` 等。

## 问题的风险及影响

业务查询结果错误。

## 影响版本

OceanBase 数据库 V4.1.0 BP2（oceanbase-4.1.0.1-102000042023061309） 及之前的 BP 版本。

## 解决方法及规避方式

- 升级到问题已修复版本。目前已修复的版本包含 OceanBase 数据库 V4.1.0 BP3（oceanbase-4.1.0.2-103000072023081111） 及之后版本。
 - 关闭 plan cache，或者在条件中增加一个不影响结果的常量。例如在问题现象的示例中，可以按照如下修改。

  ```shell
  select count(*) from t1 where c1 < sysdate - 0;

  ```

上一篇

[in 优化 query range 抽取有问题导致查询结果不一致](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000043615)

下一篇

[query range 抽取报错 4016](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000245503) ![有帮助](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) 咨询热线
