PL/SQL(三)数据类型
PL/SQL不但支持Oracle SQL的数据类型,还具备自身的数据类型。PL/SQL的数据类型包括标量数据类型,引用数据类型和存储文本、图像、视频、声音等非结构化的大数据类型(LOB数据类型)等。下面列举一些常用的类型。
※标量数据类型
标量数据类型的变量只有一个值,且内部没有分量。标量数据类型包括数字型,字符型,日期型和布尔型。这些类型有的是Oracle SQL中定义的数据类型,有的是PL/SQL自身附加的数据类型。字符型和数字型又有子类型,子类型只与限定的范围有关,比如NUMBER类型可以表示整数,也可以表示小数,而其子类型POSITIVE只表示正整数。
类型 | 说明 |
VARCHAR2(长度) |
可变长度字符串,Oracle SQL定义的数据类型,在PL/SQL中使用时最常32767字节。 在PL/SQL中使用没有默认长度,因此必须指定。 |
NUMBER(精度,小数) | Oracle SQL定义的数据类型 |
DATE | Oracle SQL定义的日期类型 |
TIMESTAMP | Oracle SQL定义的日期类型 |
CHAR(长度) |
Oracle SQL定义的日期类型,固定长度字符,最长32767字节, 默认长度是1,如果内容不够用空格代替。 |
LONG |
Oracle SQL定义的数据类型,变长字符串基本类型,最长32760字节。 在Oracle SQL中最长2147483647字节。 |
BOOLEAN | PL/SQL附加的数据类型,逻辑值为TRUE、FALSE、NULL |
BINARY_INTEGER | PL/SQL附加的数据类型,介于-231和231之间的整数。 |
PLS_INTEGER |
PL/SQL附加的数据类型,介于-231和231之间的整数。 类似于BINARY_INTEGER,只是PLS_INTEGER值上的运行速度更快。 |
NATURAL | PL/SQL附加的数据类型,BINARY_INTEGER子类型,表示从0开始的自然数。 |
NATURALN | 与NATURAL一样,只是要求NATURALN类型变量值不能为NULL。 |
POSITIVE | PL/SQL附加的数据类型,BINARY_INTEGER子类型,正整数。 |
POSITIVEN | 与POSITIVE一样,只是要求POSITIVE的变量值不能为NULL。 |
REAL | Oracle SQL定义的数据类型,18位精度的浮点数 |
INT,INTEGER,SMALLINT | Oracle SQL定义的数据类型,NUMBERDE的子类型,38位精度整数。 |
SIGNTYPE | PL/SQL附加的数据类型,BINARY_INTEGER子类型。值有:1、-1、0。 |
STRING | 与VARCHAR2相同。 |
※属性数据类型
当声明一个变量的值是数据库中的一行或者是数据库中某列时,可以直接使用属性类型来声明。Oracle中存在两种属性类型:%TYPE和%ROWTYPE。
% ROWTYPE
引用数据库表中的一行作为数据类型,即RECORD类型(记录类型),是PL/SQL附加的数据类型。表示一条记录,就相当于C#中的一个对象。可以使用“.”来访问记录中的属性。
代码演示:
SQL> DECLARE 2 myemp EMP%ROWTYPE; ① 3 BEGIN 4 SELECT * INTO myemp FROM emp WHERE empno=7934; ② 5 dbms_output.put_line(myemp.ename); ③ 6 END;
代码解析:
① 声明一个myemp对象,该对象表示EMP表中的一行。
② 从EMP表中查询一条记录放入myemp对象中。
③ 访问该对象的属性可以使用“.”。
%TYPE
引用某个变量或者数据库的列的类型作为某变量的数据类型。
代码演示:%TYPE应用
SQL> DECLARE 2 sal emp.sal%TYPE; ① 3 mysal number(4):=3000; 4 totalsal mysal%TYPE; ② 5 BEGIN 6 SELECT SAL INTO sal FROM emp WHERE empno=7934; 7 totalsal:=sal+mysal; 8 dbms_output.put_line(totalsal); 9 END;
代码解析:
① 定义变量sal为emp表中sal列的类型。
② 定义totalsal是变量mysal的类型。
%TYPE可以引用表中的某列作的类型为变量的数据类型,也可以引用某变量的类型作为新变量的数据类型。