`
JEmql
  • 浏览: 63309 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

oracle 隐式转换规则总结

阅读更多

在oracle中,如果不同的数据类型之间关联,如果不显式转换数据,则它会根据以下规则对数据进行隐式转换

 

1) 对于INSERT和UPDATE操作,oracle会把插入值或者更新值隐式转换为字段的数据类型。

   假如id列的数据类型为number

   update t set id='1'; -> 相当于 update t set id=to_number('1');

   insert into t(id) values('1') -> insert into t values(to_number('1'));

 

2) 对于SELECT语句,oracle会把字段的数据类型隐式转换为变量的数据类型。
   如假设id列的数据类型为varchar2

   select * from t where id=1; -> select * from t where to_number(id)=1;

   但如果id列的数据类型为number,则

   select * from t where id='1'; -> select * from t where id=to_number('1');(参考下文)

 

3) 当比较一个字符型和数值型的值时,oracle会把字符型的值隐式转换为数值型。

    如假设id列的数据类型为number

    select * from t where id='1'; -> select * from t where id=to_number('1');

 

4) 当比较字符型和日期型的数据时,oracle会把字符型转换为日期型。

    如假设create_date为字符型,

    select * from t where create_date>sysdate; -> select * from t where to_date(create_date)>sysdate;(注意,此时session的nls_date_format需要与字符串格式相符)

    假设create_date为date型,

    select * from t where create_date>'2006-11-11 11:11:11'; -> select * from t where   create_date>to_date('2006-11-11 11:11:11'); (注意,此时session的nls_date_format需要与字符串格式相符)

 

5) 如果调用函数或过程等时,如果输入参数的数据类型与函数或者过程定义的参数数据类型不一直,则oracle会把输入参数的数据类型转换为函数或者过程定义的数据类型。

   如假设过程如下定义 p(p_1 number)

   exec p('1'); -> exec p(to_number('1')); 6)

   赋值时,oracle会把等号右边的数据类型转换为左边的数据类型。

   如 var a number a:='1'; - > a:=to_number('1');

 

7) 用连接操作符(||)时,oracle会把非字符类型的数据转换为字符类型。

    select 1||'2' from dual; -> select to_char(1)||'2' from dual;

8) 如果字符类型的数据和非字符类型的数据(如number、date、rowid等)作算术运算,则oracle会将字符类型的数据转换为合适的数据类型,这些数据类型可能是number、date、rowid等。

    如果CHAR/VARCHAR2 和NCHAR/NVARCHAR2之间作算术运算,

    则oracle会将她们都转换为number类型的数据再做比较。

9) 比较CHAR/VARCHAR2 和NCHAR/NVARCHAR2时,如果两者字符集不一样,则默认的转换方式是将数据编码从数据库字符集转换为国家字符集。

 

简单总结:

比较时,一般是字符型转换为数值型,字符型转换为日期型

算术运算时,一般把字符型转换为数值型,字符型转换为日期型

连接时(||),一般是把数值型转换为字符型,日期型转换为字符型

赋值、调用函数时,以定义的变量类型为准。

分享到:
评论
1 楼 aaronhugo 2011-06-24  
恩,很详细,对我有帮助,赞一个!

相关推荐

    Oracle11g从入门到精通2

    3.1.3 SQL语句的编写规则 3.2 数据定义 3.2.1 CREATE 3.2.2 DROP 3.2.3 ALTER 3.3 数据查询 3.3.1 简单查询 3.3.2 WHERE子句 3.3.3 ORDER BY子句 3.3.4 GROUPBY子句 3.3.5 HAVING子句 3.3.6 ...

    ORACLE SQL性能优化规范

    - 适当的数据类型:确保WHERE子句中的条件与字段类型匹配,避免隐式类型转换。 - 减少临时结果:通过合适的JOIN方法和操作符减少中间结果的大小。 3. 选用适合的ORACLE优化器: Oracle数据库提供CBO(成本基础优化...

    Oracle to_char(date)用法总结

    隐式数据类型转换是指 Oracle 自动将一种数据类型转换为另一种数据类型,而显式数据类型转换则需要使用特殊的函数来实现。 在 Oracle 中,to_char 函数是将日期类型转换为字符类型的函数。该函数可以将日期类型的...

    超详细Oracle教程

    ### 超详细Oracle教程知识点总结 #### 一、引言 - **Oracle与SUN合并背景**:2009年,Oracle宣布以74亿美元收购SUN Microsystems,这一举措被视为Oracle进军云计算领域的关键步骤。SUN不仅拥有MySQL数据库,还有...

    oracle数据库开发规范.doc

    - **禁止隐式转换**: 禁止进行字段数据类型的隐式转换,所有数据类型转换必须显式进行。 **7. 多表关联** - **明确关联条件**: 在进行多表关联时,应当明确指定关联条件,避免因关联条件不明确导致的数据查询...

    基于Oracle流复制技术的高性能数据同步接口实现.pdf

    总结来说,Oracle流复制技术是解决高性能数据同步问题的一种有效手段,它通过捕获、传播和应用三个关键过程,实现源数据库和目标数据库之间的实时数据同步。这种技术的灵活性、可扩展性和高可用性使其在复杂的IT环境...

    SQL语句优化总结

    因此,在编写SQL语句时,应避免隐式类型转换,并尽可能使用显式类型转换。 8. 用WHERE替代ORDER BY 在ORDER BY子句中,只有当所有的列都包含在相同的索引中并保持索引的排列顺序时,才能使用索引。而WHERE子句使用...

    Java面试宝典.pdf

    隐式转换是自动发生的类型转换,例如较小的数值类型自动转换为较大的数值类型;显式转换则是强制类型转换,需要程序员显式地使用类型转换运算符来进行,可能会导致数据精度损失。 12. Java的集合框架:Java的集合...

    Oralce试题

    从给定的Oracle试题中,我们可以总结出一系列与Oracle数据库管理相关的知识点,这些知识点涵盖了数据库设计、查询优化、数据操作语言(DML)、数据定义语言(DDL)、数据控制语言(DCL)、PL/SQL编程以及Oracle系统参数等...

    PLSQL程序设计.pdf (清晰版)

    以上是根据给定的文档内容总结出的PL/SQL程序设计的相关知识点,涵盖了从基础到进阶的各个方面。通过学习这些内容,可以帮助开发者更好地理解和掌握PL/SQL语言,从而有效地利用Oracle数据库的功能。

    精通SQL--结构化查询语言详解

    8.3.7 select语句各查询子句总结 156 第9章 多表查询 157 9.1 本章用到的实例表 157 9.2 表的基本连接 158 9.2.1 连接表的目的 158 9.2.2 简单的二表连接 159 9.2.3 多表连接 161 9.2.4 使用表别名 162 ...

    提高数据仓库的ETL效率

    数据仓库的核心之一是ETL(Extract, Transform, Load)过程,即数据抽取、转换和加载。这一过程主要依赖于SQL语句,因此,优化SQL语句以提高ETL效率成为了数据仓库建设和管理的关键环节。 #### 二、优化的思路分析 ...

    java必备知识点大全.pdf

    修饰符的作用:Java中的修饰符用于定义类、方法和变量的访问规则。 框架篇: Struts1的运行原理:Struts1是一个基于MVC架构的Web应用框架。 Struts2的运行原理:Struts2是在Struts1和WebWork技术基础上进行了合并...

    vc++ 应用源码包_1

    独立打包,保证可解压,内含大量源码,网上搜集而来。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、...

    vc++ 应用源码包_2

    独立打包,保证可解压,内含大量源码,网上搜集而来。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、...

    vc++ 应用源码包_6

    独立打包,保证可解压,内含大量源码,网上搜集而来。一共10几包,每个包几十兆。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序...

    vc++ 应用源码包_5

    独立打包,保证可解压,内含大量源码,网上搜集而来。一共10几包,每个包几十兆。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序...

    vc++ 应用源码包_3

    独立打包,保证可解压,内含大量源码,网上搜集而来。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、...

Global site tag (gtag.js) - Google Analytics