ORACLE 执行计划的问题

andornot123 2013-02-28 05:59:45
我用的数据库是ORACLE 9.2.0.1.0版本,optimizer_mode是:CHOOSE
在执行以下语句的时候:
SQL文1:
select NM_VALIDATION_DISP, VALIDATION_VALUE
from TABLE_MNG
where
VALIDATION_VALUE between 2 and 9 and NM_VALIDATION = 'v_inst_sts_tp'
order by VALIDATION_VALUE
正常通过。
但是换成如下语句:
SQL文2:
select NM_VALIDATION_DISP, VALIDATION_VALUE
from TABLE_MNG
where
NM_VALIDATION = 'v_inst_sts_tp' and VALIDATION_VALUE between 2 and 9
order by VALIDATION_VALUE

就报错了,原因是:SQL文执行从条件前往后执行,VALIDATION_VALUE这个字段里有非数字的字符。

于是我将:optimizer_mode改成:ALL_ROWS
SQL文1可以通过,SQL2文却不行了。
原因可能是:SQL文执行从条件后往前执行了吧。

不知道有没有表达清楚。

请大侠指教,不胜感激。
...全文
145 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
andornot123 2013-03-01
  • 打赏
  • 举报
回复
不行啦,是个已经存在系统,是搭已经存在系统的环境,不是开发。
cowboyhn 2013-02-28
  • 打赏
  • 举报
回复
既然VALIDATION_VALUE是字符类型,那就改写为VALIDATION_VALUE BETWEEN '2' AND '9',避免执行TO_NUMBER。
andornot123 2013-02-28
  • 打赏
  • 举报
回复
执行了:select * from v$sql_plan where object_owner=‘USER’结果是:

OBJECT_NAME OPTIMIZER IO_COST FILTER_PREDICATES
VALIDATION_MNG ANALYZED 2 "NM_VALIDATION"='v_inst_sts_tp' AND TO_NUMBER("VALIDATION_VALUE")>=2 AND TO_NUMBER("VALIDATION_VALUE")<=9
VALIDATION_MNG ANALYZED 2
VALIDATION_MNG ANALYZED 2 TO_NUMBER("VALIDATION_VALUE")>=2 AND TO_NUMBER("VALIDATION_VALUE")<=9 AND "NM_VALIDATION"='v_inst_sts_tp'
andornot123 2013-02-28
  • 打赏
  • 举报
回复
还有我在ORACLE11G下也有个同样的数据库,optimizer_mode是:ALL_ROWS,两个条件前后颠倒写法都没问题。

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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