PL/SQL 数值类型

32 篇文章 1 订阅
15 篇文章 1 订阅

PL/SQL中 提供了各种各样的数值类型:NUMBERPLS_INTERGERSIMPLE_INTEGERINTEGERBINARY_FLOATBINARY_DOUBLENUMBERPLS_INTERGER 是最常用的数值类型。

#NUMBER
真正的十进制类型,可以表示整数和小数,Oracle中唯一的平台独立的数值类型,可以用于资金计算。

浮点数声明:

variable1 NUMBER;

支持的合法数值范围为[1.0E - 130, 1.0E126 - 1] 。进行算术运算时,小于最小值的值将得到结果0,大于最大值的值将得到结果未定义,这会导致运行时问题,但是却不会有异常产生,但是如果明确把在支持的数值范围之外的值赋值给变量,将会有异常被抛出。

定点数声明:

variable2 NUMBER (precision, scale)

precision是这个数中的有效数字的位数,scale为正数时,表示小数点右边的位数,为负数时,表示小数点左边的位数,scale影响了四舍五入的位置。

precisionscale都必须为字面量整数,不能是变量,常量。precision的合法范围为**[1, 38]scale的合法范围为[-84, 127]**.

#PLS_INTEGER
依赖硬件底层实现的有符号整数类型,有效范围为[-2147483648 , 2147483647]。不能用于数据库的表中,是PL/SQL自有的一个类型。

PLS_INTEGER为速度设计,当用PLS_INTEGER类型的数值计算时,直接使用了硬件的底层机器指令,性能高于使用NUMBER类型做数值计算。但是如果计算过程涉及到频繁的在PL_INTERGER与NUMBER类型之间进行转换,则会影响效率,此时直接使用NUMBER也许是一个更好的选择。

#SUBTYPE
subtype关键字用于创建一种“新的类型”,然而新创建的类型仅仅是在内建的基础类型基础上附加一个可选的约束,而不是一种全新的数据类型。

可以在任何声明区域声明自定义的新类型

SUBTYPE subtype_name IS base_type[(constraint)] [NOT NULL];

base_type可以是数值类型,也可以是其他任何合法的类型,Oracle已经内建有一些SUBTYPE,比如SIGNTYPE只能有取值-1,0,1,POSITIVE本质上就是一个取值范围为[1, 2147483647]的BINARY_INTEGER, POSITIVENPOSITIVE类似,但是不能为NULL,此外,FLOATINTEGERDECIMAL这些类型本质上也都是基于对应的基础类型声明的SUBTYPE

subtype在类型方面为pl/sql提供了更多一层的封装,可以让代码本身更具自表达性,使代码更易读,易维护。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值