赞
踩
一、数值数据类型
1.NUMERIC[精度,标度]:用于存储零、正负定点数。精度范围1至38
2.NUMBER类型:跟NUMERIC相同
3.DECIMAL/DEC类型:跟NUMERIC相似
4.BIT类型:用于存储整数数据1、0或null
5.INTEGER/INT类型:用于存储有符号整数,精度为10
6.PLS_INTEGER类型:与INTEGER相同
7.BIGINT类型:用于存储有符号整数,精度为19,标度为0
8.TINYINT类型:用于存储有符号整数,精度为3,标度为0。取值范围为:-128~+127。
9.BYTE类型:与TINYINT相似,精度为3,标度为0。
10.SMALLINT类型:用于存储有符号整数,精度为5,标度为0。
11.BINARY类型:指定定长二进制数据。
12.VARBINARY类型:指定变长二进制数据。用法类似BINARY数据类型。
13.REAL类型:带二进制的浮点数。
14.FLOAT类型:二进制精度的浮点数,精度最大不超过53。
15.DOUBLE类型:同FLOAT相似,精度最大不超过53。
16.DOUBLE PRECISION类型:该类型指明双精度浮点数,其二进制精度为53,十进制精度为15。
二、字符数据类型
1.CHAR/CHARACTER类型:定长字符串,最大长度由数据库页面大小决定。
2.VARCHAR类型:可变长字符串,最大长度由数据库页面大小决定。
三、多媒体数据类型
1.TEXT/LONGVARCHAR类型:变长字符串类型,其字符串的长度最大为2G-1,可用于存储长的文本串。
2.IMAGE/LONGVARBINARY类型:可用于存储多媒体信息中的图像类型。
3.BLOB类型:用于指明变长的字符串,长度最大为2G-1字节。
4.CLOB类型:用于指明变长的字符串,长度最大为2G-1字节。
5.BFILE类型:用于指明存储在操作系统中的二进制文件。
四、日期时间数据类型
1.DATE类型:包括年、月、日信息,定义了‘-4712-01-01’和‘9999-12-31’之间任何一个有效的格里高利日期。
2.TIME类型:包括时、分、秒信息。
3.TIMESTAMP/DATATIME:包括年、月、日、时、分、秒信息。
4.TIME WITH TIME ZONE类型:描述一个带时区的TIME值。
5.TIMESTAMP WITH TIME ZONE类型
6.TIMESTAMP WITH LOCAL TIME ZONE类型:描述一个本地时区的TIMESTAMP值。
7.BOOL/BOOLEAN数据类型:布尔数据类型TRUE和FALSE。
五、%TYPE和%ROWTYPE
两者都返回一个基于表定义的运算类型,它将一个记录声明为具有相同类型的数据库行。
例子:
DECLARE
v_type PERSON.ADDRESS.ADDRESS1%TYPE;
BEGIN
SELECT ADDRESS1 INTO v_type FROM PERSON.ADDRESS WHERE ADDRESSID=1;
PRINT v_type;
END;
/
ADDRESS1绑定PERSON.ADDRESS
DECLARE
v_row PERSON.ADDRESS%ROWTYPE;
cur CURSOR;
BEGIN
OPEN cur FOR SELECT * FROM PERSON.ADDRESS WHERE ADDRESSID=3;
FETCH cur INTO v_row;
PRINT v_row.ADDRESSID;
PRINT v_row.ADDRESS1;
CLOSE cur;
END;
使用%ROWTYPE将变量v_row与表PERSON.ADDRESS的行相对应。
六、记录类型
语法:
TYPE <记录类型名> IS RECORD
(<字段名><数据类型> [<default子句>]{,<字段名><数据类型> [<default子句>]});
<default子句> ::= <default子句1> | <default子句2>
<default子句1> ::= DEFAULT <缺省值>
<default子句2> ::= := <缺省值>
七、数组类型
静态数组类型:在声明时已经确定了数组大小的数组,其长度是预先定义好的,无法改变
例子:
declare
type arr is array varchar[3];
a arr;
type arr1 is array varchar[2,4];
b arr1;
begin
for i in 1..3 loop
a[i]=i*2;
print a[i];
end loop;
print '-----------';
for i in 1..2 loop
for j in 1..4 loop
b[i][j]=i*2+j*4;
print b[i][j];
end loop;
end loop;
end;
动态数组类型:可以随程序需要而重新制定大小,其内存空间是从堆上分配。
语法:
数组变量名:= NEW 数据类型[常量表达式,…];
例子:
DECLARE
TYPE Arr IS ARRAY VARCHAR[];
a Arr;
BEGIN
a := NEW VARCHAR[4];--动态分配空间
FOR I IN 1..4 LOOP
a[I] := I * 4;
PRINT a[I];
END LOOP;
END;
复杂类型数组
除了普通数据类型的数组,DM还支持自定义类型、记录类型和集合类型的数组。
例子:
定义了一个自定义类型(OBJECT类型)的静态数组,存放图书的序号和名称。
CREATE OR REPLACE TYPE COMPLEX AS OBJECT(
RPART INT,
IPART VARCHAR(100)
);
/
DECLARE
TYPE ARR_COMPLEX IS ARRAY SYSDBA.COMPLEX[3];
arr ARR_COMPLEX;
BEGIN
FOR I IN 1..3 LOOP
SELECT SYSDBA.COMPLEX(PRODUCTID, NAME) INTO arr[I] FROM PRODUCTION.PRODUCT WHERE PRODUCTID=I;
PRINT arr[I].RPART || arr[I].IPART;
END LOOP;
END;
/
也可以将上例中的对象类型改为记录类型,则DMSQL程序可写为:
DECLARE
TYPE REC IS RECORD(ID INT, NAME VARCHAR(128));
TYPE REC_ARR IS ARRAY REC[3];
arr REC_ARR;
BEGIN
FOR I IN 1..3 LOOP
SELECT PRODUCTID, NAME INTO arr[I] FROM PRODUCTION.PRODUCT WHERE PRODUCTID=I;
PRINT arr[I].ID || arr[I].NAME;
END LOOP;
END;
DECLARE
TYPE VARY IS VARRAY(3) OF varchar(100);
TYPE ARR_VARY IS ARRAY VARY[8];
arr ARR_VARY;
v1,v2,v3 varchar(50);
BEGIN
FOR I IN 1..8 LOOP
SELECT NAME,PERSON.SEX,TITLE INTO v1,v2,v3 FROM PERSON.PERSON,RESOURCES.EMPLOYEE WHERE PERSON.PERSONID=EMPLOYEE.PERSONID AND PERSON.PERSONID=I;
arr[I] := VARY(v1,v2,v3);
PRINT '*****工号'||I||'*****';
FOR J IN 1..3 LOOP
PRINT arr[I][J];
END LOOP;
END LOOP;
END;
/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。