where条件的隐式类型转换
where子句中列值与参数值比较时,遵循向更精确类型转换的原则,进行自动类型转换。
比如:列为VARCHAR2类型、参数为数值类型。where col = 123,实际比较时为where to_number(col) = 123。
可通过执行计划查看转换细节:
EXPLAIN PLAN FOR
SELECT * FROM xxxTable WHERE xxxCol = '123';
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
转换后的列无法使用索引,可能导致索引失效。
当字符无法正确转为目标类型,比如'abc'转123,会抛出ORA-01722:invalid number异常。