我用的数据库是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文执行从条件后往前执行了吧。不知道有没有表达清楚。请大侠指教,不胜感激。ORACLE 执行计划的问题oraclesql数据库
在执行以下语句的时候:
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文执行从条件后往前执行了吧。不知道有没有表达清楚。请大侠指教,不胜感激。ORACLE 执行计划的问题oraclesql数据库
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'