知识点的梳理:
- Oracle中的varchar2与其他数据库的varchar完全一样;
-
使用UNICODE编码最大的方便之处是统一了字符与汉字的长度。这样在进行文字处理时会更加方便。但是,由于所有的字母都会按照十六进制保存,所以会存在浪费空间的问题
-
四类数据类型
- 标量类型(SCALAR,或称基本数据类型):用于保存单个值,例如字符串,数字,日期,布尔;
- 复合类型(COMPOSITE):复合类型可以在内部存放多种数值,类似于多个变量的集合,例如记录类型,嵌套表,索引表,可变数组等;
- 引用类型(REFERENCE):用于指向另一个不同对象,例如REF CURSOR,REF;
- LOB类型:大数据类型,最多可以存储4GB的信息,主要用来处理二进制数据;
-
标量类型
- 标量类型也被称为基本数据类型
-
常见标量类型
-
数值型
-
NUMBER数据类型
-
采用十进制类型,需将十进制转为二进制进行计算
- 定义整型:NUMBER(n);
- 定义浮点型数据:NUMBER(m,n)
- 实例1:定义NUMBER变量
-
-
DECLARE v_x NUMBER(3) ; -- 最多只能为3位数字 v_y NUMBER(5,2) ; -- 3位整数,2位小数 BEGIN v_x := -500 ; v_y := 999.88 ; DBMS_OUTPUT.put_line('v_x = ' || v_x) ; DBMS_OUTPUT.put_line('v_y = ' || v_y) ; DBMS_OUTPUT.put_line('加法运算:' || (v_x + v_y)) ; -- 整数 + 浮点数 = 浮点数 END ; / |
效果: v_y = 999.88 加法运算:499.88 |
-
BINARY_INTEGER与PLS_INTEGER
-
说明:
- 两者具有相同的范围长度。与NUMBER比较,占用的范围更小;
- 采用二进制补码存储,运算性能比NUMBER高;
-
两者区别:
- BINARY_INTEGER操作的数据大于其数据范围时,会自动转换为NUMBER型进行保存;
- PLS_INTEGER操作的数据大于范围时,会抛出异常信息
- 示例1:验证PLS_INTEGER操作
-
DECLARE v_pls1 PLS_INTEGER := 100 ; v_pls2 PLS_INTEGER := 200 ; v_result PLS_INTEGER ; BEGIN v_result := v_pls1 + v_pls2 ; DBMS_OUTPUT.put_line('计算结果:' || v_result) ; END ; / |
计算结果:300 |
-
BINARY_FLOAT与BINARY_DOUBLE
- 两者比NUMBER节约空间,同时范围更大,采用二进制存储数据;
- 示例1:验证BINARY_DOUBLE操作
DECLARE v_float BINARY_FLOAT := 8909.51F ; v_double BINARY_DOUBLE := 8909.51D ; BEGIN v_float := v_float + 1000.16 ; v_double := v_double + 1000.16 ; DBMS_OUTPUT.put_line('BINARY_FLOAT变量内容:' || v_float) ; DBMS_OUTPUT.put_line('BINARY_DOUBLE变量内容:' || v_double) ; END ; / |
计算结果: BINARY_FLOAT变量内容:9.90966992E+003 BINARY_DOUBLE变量内容:9.9096700000000001E+003 |
-
两者定义的常量:这些常量只能在PL/SQL中使用。这些常量分别表示BINARY_FLOAT与BINARY_DOUBLE的数据范围,同时针对非数字与超过其类型最大值的数据标记