y18511664518
作者y185116645182017-08-08 09:40
技术总监, 长城超云

oracle数据库知识点分享专题三-----隐式转换

字数 1488阅读 1734评论 0赞 4

一 知识点简介
在oracle中,如果不同的数据类型之间关联,如果不显式转换数据,则它会根据规则对数据进行隐式转换。

二 知识点内容
1、如果字符类型的数据和非字符类型的数据(如number、date、rowid等)作算术运算,则oracle会将字符类型的数据转换为合适的数据类型,这些数据类型可能是number、date、rowid等。
2、如果CHAR/VARCHAR2 和NCHAR/NVARCHAR2之间作算术运算,则oracle会将她们都转换为number类型的数据再做比较。
3、 比较CHAR/VARCHAR2 和NCHAR/NVARCHAR2时,如果两者字符集不一样,则默认的转换方式是将数据编码从数据库字符集转换为国家字符集。

三 实验过程
1)对于INSERT和UPDATE操作,oracle会把插入值或者更新值隐式转换为字段的数据类型,如:
id列类型 原句 等同于
number update t set id='1'; update t set id=to_number('1');
number 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;
number select from t where id='1'; select from t where id=to_number('1');

3)当比较一个字符型和数值型的值时,oracle会把字符型的值隐式转换为数值型.如:
id列类型 原句 等同于
varchar2 select from t where id=1; select from t where to_number(id)=1;
number select from t where id='1'; select from t where id=to_number('1');

4) 如果调用函数或过程等时,如果输入参数的数据类型与函数或者过程定义的参数数据类型不一直,则oracle会把输入参数的数据类型转换为函数或者过程定义的数据类型,如:
假设过程如下定义
p(p_1 number)
exec p('1'); -> exec p(to_number('1'));
5) 赋值时,oracle会把等号右边的数据类型转换为左边的数据类型.如:
var a number
a:='1'; - > a:=to_number('1');
6)用连接操作符(||)时,oracle会把非字符类型的数据转换为字符类型.如:
select 1||'2' from dual; -> select to_char(1)||'2' from dual;

四 权威资料
《SQL cookbook》
《Oracle官方文档》

五 总结
1、比较时,一般是字符型转换为数值型,字符型转换为日期型。
2、算术运算时,一般把字符型转换为数值型,字符型转换为日期型。
3、连接时(||),一般是把数值型转换为字符型,日期型转换为字符型。
4、赋值、调用函数时,以定义的变量类型为准。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

4

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广