Oracle 隐式数据类型转换

目录

Oracle类型转换规则:

看如下实验:

1、创建一张表,字段id的类型为number,id字段创建索引,插入一条测试数据

2、我们做如下查询,id的值设置为字符型的'1'

3、查看执行计划:


Oracle类型转换规则:

  • 对于insert和update操作,oracle将值转换为受影响的的列的类型。
  • 对于select操作,oracle会将列的值的类型转换为目标变量的类型。

看如下实验:

1、创建一张表,字段id的类型为number,id字段创建索引,插入一条测试数据

复制代码
create table test(id number);

create index idx_test_id on test(id);

insert into test values(1);

2、我们做如下查询,id的值设置为字符型的'1'

3、查看执行计划:

是不是很意外,Oracle没有进行类型转换。使用了索引扫描,把'1'认为是数值型的1。

其实任何的数值型都可以转换为字符型。因此在一个数值型的字段上,添加to_char函数是多余的。

老外总结了一张图,说明了哪些类型间可以直接转换,哪些需要在列上添加函数来转换,非常的好:


增加一个nvarchar2(10)字段name

复制代码
alter table TEST add NAME VARCHAR2(10);

插入测试数据

复制代码
insert into test values(1,'1');

查询

复制代码
explain plan for select * from test where name='1';
select * from table(dbms_xplan.display);

查询

复制代码
explain plan for select * from test where name=1;
select * from table(dbms_xplan.display);
相关推荐
Elseide艾思几秒前
艾思政策数据库正式发布(1989年至今)
数据库
zhengfei61115 分钟前
OrangeHRM RCE 最新漏洞利用 - CVE-2025-66224
数据库
中國移动丶移不动21 分钟前
Python MySQL 数据库操作完整示例
数据库·python·mysql
木风小助理37 分钟前
B+树何以成为数据库索引的“天选之结构”?
数据库
7ioik39 分钟前
为什么lnnoDB存储引擎默认使用B+树作为索引结构?
数据库·b树·oracle
斯普信专业组2 小时前
PostgreSQL高可用集群部署与配置指南
数据库·postgresql
利刃大大3 小时前
【MyBatis】MyBatis操作动态sql && MyBatisGenerator
数据库·sql·mybatis
一瓢西湖水3 小时前
loader命令导出大批量数据维护SQL
数据库·sql
颜颜yan_4 小时前
时序数据库选型指南:工业物联网时代如何选择数据底座
数据库·物联网·时序数据库
云和数据.ChenGuang4 小时前
Logstash配置文件的**语法解析错误**
运维·数据库·分布式·rabbitmq·jenkins