Oracle 隐式数据类型转换

作者:神秘网友 发布时间:2020-09-27 07:51:29

Oracle 隐式数据类型转换

Oracle 隐式数据类型转换

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);

Oracle 隐式数据类型转换

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

Oracle 隐式数据类型转换

3、查看执行计划:

Oracle 隐式数据类型转换

是不是很意外,Oracle没有进行类型转换。使用了索引扫描,把'1'认为是数值型的1。
其实任何的数值型都可以转换为字符型。因此在一个数值型的字段上,添加to_char函数是多余的。
老外总结了一张图,说明了哪些类型间可以直接转换,哪些需要在列上添加函数来转换,非常的好:

Oracle 隐式数据类型转换

-----------------------------------------------------------------------------------------------------------------------------

增加一个nvarchar2(10)字段name

alter table TEST add NAME VARCHAR2(10);

Oracle 隐式数据类型转换

插入测试数据

insert into test values(1,'1');

Oracle 隐式数据类型转换

查询

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

Oracle 隐式数据类型转换

查询

explain plan for select * from test where name=1;
select * from table(dbms_xplan.display);

 Oracle 隐式数据类型转换

Oracle 隐式数据类型转换相关教程

  1. 【亡羊补牢】挑战数据结构与算法 第34期 LeetCode 17. 电话号码

    【亡羊补牢】挑战数据结构与算法 第34期 LeetCode 17. 电话号码的字母组合(递归与回溯) 仰望星空的人,不应该被嘲笑 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

  2. vuex 添加全局数据和使用(业务:vue将码表数据设为全局,进行调

    vuex 添加全局数据和使用(业务:vue将码表数据设为全局,进行调用) 原来调用码表都是直接在页面或者组件中直接调用,但是由于本次需求调用的数据又多又杂,数据加载量达到 10M 多,页面加载就异常的慢。还有组件中也都需要用到,为了不重复调用接口,加重服

  3. 使用logstash将mysql数据导入elasticsearch中

    使用logstash将mysql数据导入elasticsearch中 下载logstash-6.2.4压缩包https://pan.baidu.com/s/1tl5X4OrEUn8rYqjKq1tsnA提取码iva3 解压缩如下图解压缩后的结果 进入config文件夹创建article_template.json文件和mysql.conf文件 创建article_template.json

  4. 使用PLSQL Developer连接数据库的问题解决方案

    使用PLSQL Developer连接数据库的问题解决方案 本文是根据百度经验中的文章自己修改其中的错误而来,解决windows 7 64bit 系统安装oracle client 64位,无法使用PLSQL Developer连接数据库的问题,问题的根源在于PLSQL_Developer只支持32位而不支持64位,即6

  5. 惊爆眼球数据库行业里程碑MySQL进阶最牛笔记面世

    惊爆眼球!数据库行业里程碑,MySQL进阶最牛笔记面世 另有大厂Java面试精选题、架构实战文档 整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~ 你的支持,我的动力;祝各位前程似锦,offer不断!!!

  6. Oacle 断电数据库恢复

    Oacle 断电数据库恢复 简介:打开 数据库时提示系统表空间需要介质恢复,但恢复系统表空间文件后数据库仍然不能打开,最终通过修复控制文件恢复了数据库。 社保药店客户操作系统为 windows XP ,数据库为 ORACLE 8.1.7 企业版上运行着城镇医疗保险 MIS 系统

  7. 【python】爬取疫情数据并进行可视化

    【python】爬取疫情数据并进行可视化 【python】爬取疫情数据并进行可视化 数据来源:https://news.qq.com/zt2020/page/feiyan.htm#/?nojump=1 最终呈现: 视频资料:https://www.bilibili.com/video/BV1f54y127dd '''课题:爬取疫情数据 进行可视化第一步:

  8. Java通过JDBC 连接数据库

    Java通过JDBC 连接数据库 (实测 太好用了) 导入数据库用的jar包 导入jar包完成后 创建 一个DBUtil 类导入代码 代码如下: import java.sql.DriverManager;import java.sql.SQLException;import com.mysql.jdbc.Connection;public class DBUtil { //1、加载