达梦数据库常规数据类型总结之一

一、数值数据类型

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;
/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值