导航
我们为什么需要Oracle的数据类型?
我们在学习其他编程语言时,始终离不开对数据的操作,而Oracle数据库作为一个数据库应用软件,更是生来就是与数据打交道的。了解字段的数据类型,并进一步了解对不同数据类型的操作方法,才能在实际应用中灵活使用,避免数据类型不一致及数据类型转换中的“坑”。
深入理解Oracle数据库的数据类型,更是对数据库的优化大有助益。
数据类型
PL/SQL的数据类型是一种静态化的类型,也被称为强类型化。数据类型的校验会在编译过程中,而不是在运行时,这样在编译时即可以发现错误,以增强程序的稳定性。
1.数字类型
PL/SQL支持的数字类型如下表:
类型 | 描述 |
---|---|
BINARY_DOUBLE | 于Oracle 10gR1中新增,是一个IEEE-754标准的双精度浮点整数类型,这个类型主要用于需要高性能的科学计算。 |
BINARY_FLOAT | 于Oracle 10gR1中新增,是一个单精度浮点数据类型,主要用于科学计算。 |
BINARY_INTEGER | 用来存储有符号的整数类型,范围在-2147483647到+2147483647之间。 |
NUMBER | 最常用的数据类型,用来存储浮点数或整数,最大精度是38。NUMBER可以用来保存浮点数,其刻度值在-84到127之间。 |
PLS_INTEGER | 用来存储有符号的整数类型,范围在-2147483647到+2147483647之间。对初学者来说,Oracle建议使用 PLS_INTEGER 而不是 BINARY_INTEGER。 |
1.1 NUMBER
NUMBER类型是日常开发中使用最多的数字类型,它即可用来表示整数,也可以用来表示浮点数。其声明语法如下:
NUMBER [( 精度 , 刻度 )]
[ ]表示声明时可以进行定义,也可以省略。如果选择定义时,可以选择只定义精度,或者同时定义精度与刻度,无法单独定义刻度。
精度:允许的数值总长度,即所有数字个数。
刻度:允许的小数点右边的数字个数,如果刻度是负数,则表示小数点左边的数字个数。
所以,精度的定义如果比刻度小,则会编译报错,例如:v_num1 NUMBER(2,3)
因为你总数字个数为2个,但你小数点后的位数就有3个了,总数字个数肯定超过。
而在不指定精度时,默认精度即为38位。但即使超过38位,依旧可以正常执行,只是超出部分精度丢失,由0补充。
来一段实例,各种使用情况都试一下:
DECLARE
v_num1 NUMBER:= 99999999919999999992999999999399999999949999999999999; --不指定精度时
v_num2 NUMBER(5):= 3.14159; --精度为3,不指定刻度,则无法显示小数,且整数位最多只能有3位
v_num3 NUMBER(5,3):= 3.14159; --小数位显示三位,则从第三位开始四舍五入
v_num4 NUMBER(5,-3):= 31415.926; --刻度为负数,从小数点右边数3位,进行四舍五入,且小数位丢失
v_num5 NUMBER(5,-1):= 31415; ---刻度为负数,从小数点右边数3位,进行四舍五入
v_num6 NUMBER:= 31415926.535897932; --默认,精度38,刻度127
BEGIN
DBMS_OUTPUT.put_line('v_num1 = '|| v_num1)