Oracle解惑(持续更新…)

48 阅读1分钟

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异常。