PL/SQL中的数据类型隐式转换规则

原文来自  Techfox IT技术论坛

1) During INSERT and UPDATE operations, Oracle converts the value to the datatype of the affected column.对于INSERT和UPDATE操作,oracle会把插入值或者更新值隐式转换为字段的数据类型。如假如id列的数据类型为numberupdate 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) During SELECT FROM operations, Oracle converts the data from the column to the type of the target variable.对于SELECT语句,oracle会把字段的数据类型隐式转换为变量的数据类型。如假设id列的数据类型为varchar2select * 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) When comparing a character value with a NUMBER value, Oracle converts the character data to NUMBER.当比较一个字符型和数值型的值时,oracle会把字符型的值隐式转换为数值型。如假设id列的数据类型为numberselect * from t where id=‘1‘; -> select * from t where id=to_number(‘1‘);--------------------------------------------------------------4) When comparing a character value with a DATE value, Oracle converts the character data to DATE.当比较字符型和日期型的数据时,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) When you use a SQL function or operator with an argument of a datatype other than the one it accepts, Oracle converts the argument to the accepted datatype.如果调用函数或过程等时,如果输入参数的数据类型与函数或者过程定义的参数数据类型不一直,则oracle会把输入参数的数据类型转换为函数或者过程定义的数据类型。如假设过程如下定义 p(p_1 number)exec p(‘1‘); -> exec p(to_number(‘1‘));--------------------------------------------------------------6) When making assignments, Oracle converts the value on the right side of the equal sign (=) to the datatype of the target of the assignment on the left side.赋值时,oracle会把等号右边的数据类型转换为左边的数据类型。如var a numbera:=‘1‘; - > a:=to_number(‘1‘);--------------------------------------------------------------7) During concatenation operations, Oracle converts from noncharacter datatypes to CHAR or NCHAR.用连接操作符(||)时,oracle会把非字符类型的数据转换为字符类型。select 1||‘2‘ from dual; -> select to_char(1)||‘2‘ from dual;--------------------------------------------------------------8) During arithmetic operations on and comparisons between character and noncharacter datatypes, Oracle converts from any character datatype to a number, date, or rowid, as appropriate. In arithmetic operations between CHAR/VARCHAR2 and NCHAR/NVARCHAR2, Oracle converts to a number.如果字符类型的数据和非字符类型的数据(如number、date、rowid等)作算术运算,则oracle会将字符类型的数据转换为合适的数据类型,这些数据类型可能是number、date、rowid等。如果CHAR/VARCHAR2 和NCHAR/NVARCHAR2之间作算术运算,则oracle会将她们都转换为number类型的数据再做比较。--------------------------------------------------------------9) Comparisons between CHAR/VARCHAR2 and NCHAR/NVARCHAR2 types may entail different character sets. The default direction of conversion in such cases is from the database character set to the national character set.比较CHAR/VARCHAR2 和NCHAR/NVARCHAR2时,如果两者字符集不一样,则默认的转换方式是将数据编码从数据库字符集转换为国家字符集。--------------------------------------------------------------简单总结:比较时,一般是字符型转换为数值型,字符型转换为日期型算术运算时,一般把字符型转换为数值型,字符型转换为日期型连接时(||),一般是把数值型转换为字符型,日期型转换为字符型赋值、调用函数时,以定义的变量类型为准。

时间: 2024-08-29 02:17:02

PL/SQL中的数据类型隐式转换规则的相关文章

C++中算术运算的隐式转换规则

1.隐式转换     C在以下四种情况下会进行隐式转换: 1.算术运算式中,低类型能够转换为高类型. 2.赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他. 3.函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参. 4.函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数. 2.算数运算的隐式转换     算数运算中,首先有如下类型转换规则: 1.字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) . 2.short型

也谈SQL Server 2008 处理隐式数据类型转换在运行计划中的增强

在 SQL Server 查询中,不经意思的隐匿数据类型转换可能导致极大的查询性能问题.比方一个看起来没有不论什么问题简单的条件:WHERE c = N'x' .假设 c 的数据类型是 varchar.而且表中包括大量的数据,这个查询可能导致极大的性能开销.由于这个操作会导致列 c 的数据类型转换为 nvarchar与常量值匹配,在 SQL Server 2008 及之后的版本号中,这样的操作做了增强,一定程度上减少了性能开销,參考SQL Server 2008 处理隐式数据类型转换在运行计划中

也谈SQL Server 2008 处理隐式数据类型转换在执行计划中的增强

在 SQL Server 查询中,不经意思的隐匿数据类型转换可能导致极大的查询性能问题,比如一个看起来没有任何问题简单的条件:WHERE c = N'x' ,如果 c 的数据类型是 varchar,并且表中包含大量的数据,这个查询可能导致极大的性能开销,因为这个操作会导致列 c 的数据类型转换为 nvarchar与常量值匹配,在 SQL Server 2008 及之后的版本中,这种操作做了增强,一定程度上降低了性能开销,参考SQL Server 2008 处理隐式数据类型转换在执行计划中的增强

SQL Server中提前找到隐式转换提升性能的办法

    http://www.cnblogs.com/shanksgao/p/4254942.html 高兄这篇文章很好的谈论了由于数据隐式转换造成执行计划不准确,从而造成了死锁.那如果在事情出现之前发现了这类潜在的风险岂不是更好?     那么我们来看一个简单的例子,如代码清单1所示.   1: SELECT * 2: FROM HumanResources.Employee 3: WHERE NationalIDNumber = 243322160 4:  5: SELECT * 6: FR

在PL/SQL中使用日期类型

之前的文章介绍了在PL/SQL中使用字符串和数字了下.毫无疑问,字符串和数字很重要,但是可以确定的是没有哪个应用不依赖于日期的. 你需要记录事件的发生事件,人们的出生日期等等很多. 通常的使用方式是: 1)声明日期变量和常量 2)使用内建函数显示和修改日期值 3)执行日期相关计算 日期类型比字符串或数字更复杂.它有多个部分组成(年,月,日,时,分,秒等),而且关于一个有效的日期有很多规则. 本文将给你所有信息以便在PL/SQL程序中使用日期. 1.PL/SQL中的日期,时间戳和间隔(Interv

PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务

1.条件控制 A. IF条件分支语法: if (条件1) then 语句; elsif (条件2) then 语句; elsif (条件3) then 语句; else 语句; end if; B . case条件分支:等值比较.条件比较.case表达式 a.等值比较语法: CASE  条件判断 WHEN      条件值的表达式    THEN       要执行的条件操作     ; ……. [ELSE   ……..] END   CASE; b. 条件比较语法: CASE WHEN   不

JavaScript复习之--javascript数据类型隐式转换

JavaScript数据类型隐式转换.一,函数类    isNaN()    该函数会对参数进行隐式的Number()转换,如果转换不成功则返回true.    alert()    输出的内容隐式的转换为字符串. 二,运算符类.    1,算术运算符.       - * / %    如果操作数不是数值,将会隐式的调用Number()函数.按照这个函数的转换规则进行转换.    如果转换不成功,整个表达式返回NaN.       +     如果操作数都是数值,然后进行相加.    任何数据

PL/SQL中自定义异常小知识

一.概念 用户定义的异常错误是通过显式使用 RAISE 语句来触发.当引发一个异常错误时,控制就转向到 EXCEPTION块异常错误部分,执行错误处理代码. 对于这类异常情况的处理,步骤如下 : 在PL/SQL 块的声明部分定义异常情况 :<异常情况>  EXCEPTION; RAISE <异常情况> 在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理. 二.程序 --例1:使用自定义异常变量 DECLARE   v_empno emp.empno%TYPE :=&

ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍

如果我是C罗 原文 ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍 sequence在ORACLE中应用十分广泛,就是序列号的意思,会自动增加指定变数,如逐次增加1或者2或者其他. 1.创建序列 Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE 权限 CREATE SEQUENCE CUX_DEMO_SEQUENCEMINVALUE 1MAXVALUE 99999999999START WITH 1000