求助关于 OPTIMIZER_FEATURES_ENABLE的设定会影响sql执行报错

dercyzzp 2018-04-21 09:10:52
oracle版本 11
OPTIMIZER_FEATURES_ENABLE = 10.2
如下sql
select
to_date(col1,'yyyymmdd')
from (
select
to_char(table1.CUR_MON, 'YYYYMM') || '01' as col1
from
table1
where
table1.CUR_MON is not null
)

table1.CUR_MON 是 date 类型,, 有null值的数据,
现在的问题是在客户环境,执行sql 会报错 ora-01840 ,,

如果在客户环境 把 OPTIMIZER_FEATURES_ENABLE 改成 9.2, 就不会报错了.

想请教各位 为什么会报错,条件里已经去除null的数据了
而且这段sql 我换成测试环境 这个错误是无法再现的...只有在客户环境才会出错.
公司测试环境和客户环境的数据库版本是一样的

如果不修改sql,,, 从oracle优化策略角度,比如做表分析什么的 可不可以解决这个错误,,总是感觉这个错误很奇怪,,不应该发生.

因为客户环境 暂时无法访问,所以不能去试验,,现在客户那边想知道 错误原因和解决办法(不修改sql)


另外说下关于 ora-01840 错误,,,可以执行这段sql select to_date('01','YYYYMMDD') from dual;

...全文
1391 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
minsic78 2018-04-25
  • 打赏
  • 举报
回复
为了一句SQL,让CBO跨两个大版本降级,是作死的行为…… 同意2#的说法:仔细查查数据是否有问题,另外可以尝试修改SQL绕过这个问题
dercyzzp 2018-04-24
  • 打赏
  • 举报
回复
引用 2 楼 jdsnhan 的回复:
OPTIMIZER_FEATURES_ENABLE 会影响查询优化器的执行,但抛出异常,没遇到过。 我建议从数据层再分析一次,看是否有异常的数据
谢谢你的回复, 数据层面没有问题,,date类型的数据除了合法日期值,就是null了,所以数据是没问题的. 这里应该是涉及到 优化器和优化模式的选择,, 在oracle9i版本里 optimize_mode是CHOOSE,根据表是否有统计信息来决定选择CBO还是RBO优化. 如果没有统计信息,并且optimize_mode是RULE的时候 sql执行就报错了,,我只分析到这里,至于更深的原因我也不知道了. 不知道还有没有人需要这种问题.
jdsnhan 2018-04-23
  • 打赏
  • 举报
回复
OPTIMIZER_FEATURES_ENABLE 会影响查询优化器的执行,但抛出异常,没遇到过。 我建议从数据层再分析一次,看是否有异常的数据
dercyzzp 2018-04-22
  • 打赏
  • 举报
回复
ding i xia

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧