• 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: 平方根

  • 相关阅读:
    eclipse中用maven打包报错排查
    关于如何下载spring tool Suite指定版本的安装包
    win10配置JDK和tomecat
    C#读取MySql时,如果存在字段类型为date/datetime时的可能会出现以下问题
    批处理安装,卸载,启动,停止服务
    微信小程序图表组件 wx-f2
    获取项目路径
    Global.asax.cs之在线人数统计
    Global.asax 文件之 Application_Error
    Global.asax 文件是什么
  • 原文地址:https://www.cnblogs.com/moveofgod/p/3548977.html
Copyright © 2020-2023  润新知