Oracle系统中对于数据类型分成四种数据类型,分别是:Scalar,Composite,Reference和Lob四种,以下对几种类型进行简单的备注。

Scalar类型

类似在JAVA语言中的原生类型,标量类型是整个Oracle中类型系统的基础类型。Scalar类型包括以下几种

  1. Number类
    • Number类主要用于保存实数、整数和浮点数。
    • Binary_Integer存储带符号的32位整数。用来描述不存储在数据库中,但是需要用来计算的带符号的整数值。它以2的补码二进制形式表述。循环计数器经常使用这种类型。
    • PLS_INTEGER和BINARY_INTENER唯一区别是在计算当中发生溢出时,BINARY_INTENER型的变量会被自动指派给一个NUMBER型而不会出错,PLS_INTEGER型的变量将会发生错误。
    • PLS_Integer的速度是最快的。
    • 在实际应用中,Binary_Integer类型较PLS_Integer类型占用的资源少,但是速度慢。
    • Binary_Integer的派生类型有Natural(非负整数),NaturalN(不可为空的非负整数),Positive(正整数),PositiveN(不可为空的正整数),SignType(存贮标志位,-1,1和0)。
    • Number类型可以存储定点数、浮点数和整数。Number(precision,scale)自动进行四舍五入的操作;标度Scale为负数的时候表示取整的操作。注意精度是指从四舍五入的位置开始向左计算的值的大小。简单的说Precision是有效的数字个数。
    • Precision的取值范围为1~38,Scale的取值范围为-84~127
    • 当省略Scale的时候(Number(Precision))表示整数。
    • 当省略Scale和Prescision的时候(number)表示38位的十进制浮点数。小数点可以在任何位置。
    • Number的子类型有Dec,Decimal,Double Precision,Float,Integer,Int,Numeric,Real和SamllInt.
    • Real类型的精度是18,Int和Integer类型和SmallInt的精度为38.
  2. Character类
    • 存放字符串
    • Char类型保存定长的字符串,Char(maximum_length),默认的时候是1,最大为32K,实际上Char的最大长度为2000。填充的位置为空格字符。
    • Varchar2 ,保存变长字符,最大的长度为理论上为32K,实际最大的长度为4000(注意,不是4K)。
    • Long :保存可变字符长度,最长的为2G。严重限制,在一个表中只能有这么一个Long类型字段。
    • NChar 和NVarchar2 都是保存NLS(National Language Support)字符串,对应Char和Varchar。char使用UTF8,每个字符1个字节,nchar使用AL16UTF16,每字符2个字节
  3. Raw类
    • Raw类型,保存固定长度的二进制流。最大长度2000。
    • Long Raw类型和Long长度一致,都是2G。
  4. RowId类
    • 伪列,存储行标识。不能生成,只能自动从表格的伪列ROwId中取得。
  5. Date类
    • 日期的开始为公元前4712年结束为公元4712年。
    • 默认的日期是当日,时间为凌晨零点。
    • 缺省显示的日期为NLS_DATE_FORMAT参数确定。
  6. Boolean类:True,false和NULL
  7. Trusted类

Composite类型

复合类型有两种:记录和表。

  1. 记录
    • Type type_name is record(fieldname fieldtype....)
    • 也可以使用直接定义表格对应的字段 Type type_name is record(fieldName table_Name.Table_Column%TYPE)
    • 更简单的直接对应表结构Type_name Table_Name%RowType。

LOB对象

LOB对象存储大对象。