Oracle PL/SQL 程序设计读书笔记 - 第9章 数字
Oracle PL/SQL 程序设计读书笔记 - 第9章 数字
9.1 数值型数字类型
- NUMBER:这是一个真正的十进制数据类型,也是PL/SQL中唯一一个用完全平台独立方式实现的数值类型。
- PLSINTEGER和BINARYINTEGER:这两种整数类型是和你的底层硬件表示整理的方法完全一致的。
- SIMPLEINTEGER:它和BINARYINTEGER有相同的取值范围,不过不允许为NULL,而且发生溢出时也不会抛出异常。
- BINARYFLOAT和BINARYDOUBLE:这两种分别IEEE-754标准中的单精度,双精度二进制浮点类型。
- SIMPLEFLOAT和SIMPLEDOUBLE:它们和BINARYFLOAT和BINARYDOUBLE有相同的聚会范围,不过不允许为NULL,而且发生溢出时也不会抛出异常,也不支持特殊的直接量或者谓词。
9.1.1 NUMBER类型
声明一个NUMBER变量最简单的办法是仅仅指明NUMBER关键字就可以了。
DECLARE x NUMBER;
这样的一个声明会产生一个浮点的NUMBER。Oracle数据库最多会分配能容纳40个数字的空单,小数点也会根据赋予变量的值作最优浮动。取值范围1.0E-130到1.0E126-1。比最小值还小的值会向下舍入为0,如果计算结果的值大于最大值将导致undefined,导致运行时错误但不会抛出异常。
NUMBER (precision, scale)
- percision是这个数值中总的有效数字的个数,范围1-38
- scale表明小数点右面(正刻度)或者左面(负刻度)的数字个数。范围-84-127
例如:
- NUMBER(9,2)->9999999.99
- NUMBER(9,11)->.00999999999
- NUMBER(9,-11)->99999999900000000000.
9.1.2 PLS_INTEGER类型
- 聚会范围从-2147483648 到 2147483647的有符号整数。
- 设计为这个数据类型是为了运算速度。
9.1.3 BINARY_INTEGER类型
9.1.4 SIMPLE_INTEGER类型
- 和PLS_INTEGER有相同的取值范围。但是它不支持NULL值,也不会检查溢出条件。
- 这个数据类型是PLS_INTEGER的性能增强版本。
9.1.5 BINARY_FLOAT和BINARY_DOUBLE类型
Oracle在对浮点类型开进隐式类型转换时有一个强制的优先级。优先级从最高到最低依次是:BINARYDOUBLE、BINARYFLOAT、NUMBER
9.1.5 SIMPLE_FLOAT和SIMPLE_DOUBLE类型
9.2 数字转换
9.2.1 TO_NUMBER函数
TO_NUMBER(string[,format [,nls_params]]
-string:是一个字符串或者包含数字表现形式的BINARY_DOUBLE表达式
- format:这是一个可选的格式掩码,用来指明如果第一个参数是个字符串的话,如何把这个字符形式的数值解释成数字
- nls_params:这是一个可选的字符串,用来指明若干NLS参数值。
9.2.2 TO_CHAR函数
是把一个数字转换成对应的字符表现形式。
TO_CHAR (number,[,format [,nls_params]])
- number:这是你想要用字符形式表示的数字。
- format:这是可选的格式掩码
- nls_params:这是一个可选的字符串,用来指明若干NLS参数值。
注意转换后的的字符形式显示一个正数前面可能会预留一个空格。
9.2.3 CAST函数
可以用来把数字转换成字符串或者相反
CAST(expression AS datatype)
CAST的缺点就是不支持数字格式样式的使用。而CAST的一个好处就是它是ISO SQL标准的一部分。
函数CAST看起来没有给PL/SQL的数字转换带来真正好处。但是,CAST可以用于写出百分百ISO兼容的SQL语句。
9.4 数字函数
9.4.1 四舍五入和截断函数
- CELL:返回大于或等于指定值的最小整数。
- FLOOR:返回小于或等于指定值的最大整数。
- FOUND:对一个数字执行四舍五入操作。
- TRUNC:把一个数字按照指定的小数位数截断。