plsql programming 09 数字

number 类型, 十进制数据类型(平台无关的)

pls_integer 和 binary_integer 这两种数据类型和你底层硬件表示整数的方法完全一致, 这两种类型的运算是利用硬件原生, 机器指令执行的, 你不能再数据库中保存这些类型的值.

binary_float 和 binary_double 一般用于浮点数计算

 

number 类型, number(9,2)  // 注意, 这里的9是9位精度, 表示有效数字要包含2位小数, 所以这个数的最大值是 9 999 999.99

number(9,11) // .00999999999, 其中 有效数字是9个, 而小数点后边的位数是11位.

number(9, -11) // 99999999900000000000 , 这种形式尽量少用, 看着迷糊

 

pls_integer 类型是为了运算速度, 因为 pls_integer 是整数, 因此在移植硬件平台时不会遇到兼容性问题, 但是如果使用pls_integer时要经常和 number类型互相转换, 那还是从一开始就使用number类型更好.

 

binary_integer 类型, 不推荐使用

simple_integer 类型 和 pls_integer 相同的取值范围, 只是它没有溢出, 也不支持 null, 所以如果你设计的列既没有null 也不可能溢出, 那么选用这种类型会有很好的性能.

例如: 下列代码, 可以比较 procedure 运行

   1:  -- chap09_01.sql
   2:  create or replace procedure pls_test(interations in pls_integer)  -- result: 590000
   3:  as
   4:      int1    pls_integer := 1;
   5:      int2    pls_integer := 2;
   6:      begints    timestamp;
   7:      endts    timestamp;
   8:  begin
   9:      begints := systimestamp;
  10:      
  11:      for cnt IN 1 .. iterations
  12:      loop
  13:          int1 := int1 + int2 * cnt;
  14:      end loop;
  15:      
  16:      endts := systimestamp;
  17:      dbms_output.put_line( iterations
  18:                              || ' iterations had run time of:'
  19:                              || to_char(endts - begints));
  20:  end;
  21:  /
  22:   
  23:  -- chap09_02.sql
  24:  -- simple_integer 是 11g 之后才有的, 所以目前测试不了
  25:  create or replace procedure pls_test(interations in simple_integer)  -- result: 590000
  26:  as
  27:      int1    simple_integer := 1;
  28:      int2    simple_integer := 2;
  29:      begints    timestamp;
  30:      endts    timestamp;
  31:  begin
  32:      begints := systimestamp;
  33:      
  34:      for cnt IN 1 .. iterations
  35:      loop
  36:          int1 := int1 + int2 * cnt;
  37:      end loop;
  38:      
  39:      endts := systimestamp;
  40:      dbms_output.put_line( iterations
  41:                              || ' iterations had run time of:'
  42:                              || to_char(endts - begints));
  43:  end;
  44:  /

 

to_number 函数

to_char

cast 也是 字符串与数字之间来回转换的.

ceil  : 返回最小整数

floor : 返回 <= 指定值得最大整数, 这个整数相当于指定值的”下限”

round : 对一个数字执行4舍5入.

trunc : 把一个数字按照指定的小数位数截断.

ABS: 绝对值

SQRT: 平方根

posted @ 2014-02-15 10:48  神之一招  阅读(427)  评论(0编辑  收藏  举报