博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PL/SQL中的数据类型隐式转换规则
阅读量:5156 次
发布时间:2019-06-13

本文共 3534 字,大约阅读时间需要 11 分钟。

原文来自 

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时,如果两者字符集不一样,则默认的转换方式是将数据编码从数据库字符集转换为国家字符集。--------------------------------------------------------------简单总结:比较时,一般是字符型转换为数值型,字符型转换为日期型算术运算时,一般把字符型转换为数值型,字符型转换为日期型连接时(||),一般是把数值型转换为字符型,日期型转换为字符型赋值、调用函数时,以定义的变量类型为准。

转载于:https://www.cnblogs.com/techfox/p/4514443.html

你可能感兴趣的文章
[USACO 1.4.3]等差数列
查看>>
Shader Overview
查看>>
Reveal 配置与使用
查看>>
Java中反射的学习与理解(一)
查看>>
C语言初学 俩数相除问题
查看>>
B/S和C/S架构的区别
查看>>
[Java] Java record
查看>>
jQuery - 控制元素显示、隐藏、切换、滑动的方法
查看>>
postgresql学习文档
查看>>
Struts2返回JSON数据的具体应用范例
查看>>
js深度克隆对象、数组
查看>>
socket阻塞与非阻塞,同步与异步
查看>>
团队工作第二天
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>