我只在存储过程中使用 BINARY_INTEGER,建表中只是用Number之类的。
BINARY_INTEGER 是扩展的SQL, pl/sql中的数据类型。不能在建表的时候使用

解决方案 »

  1.   

    to icesummit:
      也就是说,在任何情况下,建表,若想用数值型字段,就只能用又大又笨又慢又麻烦的Number?真是可怕!你所说的“扩展的SQL”是什么意思?在哪些地方能用?在哪些地方不能用?pl/sql是扩展的sql吗?sqlplus中敲的是扩展sql吗?schema manager中用的是扩展的sql吗?
      

  2.   

    建表要用标准SQL,PL/SQL是ORACLE中的编程语言!
      

  3.   

    扩展的plsql在oracle的过程、函数、包中都能用,在前端开发工具developer中也可以用。但是建表属于标准sql,不能用。
    数值型只能用number,怎么笨重了?
      

  4.   


      我说Number类型“又大又笨又慢又麻烦”,是我个人的理解,如果理解有误请不吝赐教。
      据我所知,number是以BCD形式处理的,而不是二进制形式,因此一个十进制位要占用两个字节。同样表示32位的整型数,二进制整数只要用4字节,number就要用20字节。因此说Number类型“大”。
      很简单的一个数,明明一两个字节就能存下,却也要用好多字节的BCD,因此说Number类型“笨”。
      正因为为不是二进制处理,所以不能充分利用CPU和其他硬件的快速的整数、定点和浮点运算功能,只能用一定的算法逐位计算。因此说Number类型“慢”。
      32位整型是各种语言中常用的数值类型,和各种数据库配合很好,其上限是2147483648,但用Number表示,还要控制其范围,可是写Number(10)就可能溢出,写Number(9)就会不够,还要专门加约束,因此说Number类型“麻烦”。
        最后,我个人的感觉,像Oracle这样大名鼎鼎的数据库,应该支持一个与各种语言完全兼容的通用的高效的短小精悍的32位整型。很简单啊,就是一个字嘛!比Number简单得多,高效得多,又好用得多,为什么Oracle就偏偏不提供呢?莫名其妙!