概述
一、数值数据类型
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;
/
最后
以上就是寒冷鸡为你收集整理的达梦数据库常规数据类型总结之一的全部内容,希望文章能够帮你解决达梦数据库常规数据类型总结之一所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复