DM SQL数据类型:
精确数值、近似数值、字符、多媒体、一般日期时间、时间间隔。
DMSQL程序数据类型:
除DM SQL数据类型外,还扩展支持%TYPE、%ROWTYPE、记录类型、数组类型、集合类型和类类型,还可用户自定义子类型。
数值数据类型
1、NUMRIC
- NUMRIC[(精度[,标度])]
用于存储0、正负定点数。精度,无符号整数,定义总的数字个数,精度范围1-38,标度定义小数点右边的数字位数,若省略精度,标度默认16,若省略标度,标度默认为0。不指定精度和标度是,默认精度38。
超过标度,多余位截断。超过精度,返回出错信息。
2、NUMBER
NUMBER[(精度[,标度])] 功能同NUMERIC
3、DECIMAL/DEC类型
DECIMAL[(精度[,标度])] / DEC [(精度[,标度])]。功能与NUMERIC相似
4、BIT类型
用于存储整数数据1、0或null,可以用来支持 odbc 和 jdbc 的布尔数据类型
5、INTEGER/INT类型
用于存储有符号整数,精度为10,标度为0。取值范围-2^31~+2^31-1
6、PLS_INTEGER类型
与integer相同
7、BIGINT
用于存储有符号整数,精度19,标度0。取值范围-2^63~+2^63-1
8、TINYINT
用于存储符号整数,精度为3,标度为0.取值范围-138~+127
9、BYTE
与TINYINT相似,精度3,标度0
10、SMALLINT
用于存储有符号整数,精度5,标度0
11、BINARY
BINARY[(长度)],指定定长二进制数据。缺省长度为1个字节,最大长度有数据库页面大小决定
12、VARBINARY
VARBINAR[(长度)]变长二进制数据,用法类似BINARY数据类型,可指定一个正整数作为数据长度,缺省8188个字节,最大有数据库页面大小决定
13、REAL
带二进制的浮点数,系统指定二进制精度为24,十进制精度为7。取值范围:-3.4E+38 ~3.4E+38
14、FLOAT
FLOAT[(精度)],带二进制精度的浮点数,二进制最大精度53,十进制最大精度15。范围-1.7E+308~1.7E+308
15、DOUBLE
DOUBLE[(精度)]同FLOAT,精度最大不超过53
16、DOUBLE PRECISION
双精度浮点数,二进制精度53,十进制精度15-1.7E+308~1.7E+308
17、数值类型举例测试:
--创建一个测试表
CREATE TABLE SCHEMA1.TAB_TEST142_1
(C1 NUMBER(3,1),
C2 BIT,
C3 INT,
C4 BYTE,
C5 VARBINARY(2),
C6 REAL,
C7 FLOAT(3));
- number类型
number(3,1)表示允许总位数3,小数位1,则整数部分2位,错过标度,使用四舍五入
--C1 number栏位插入数据
INSERT INTO SCHEMA1.TAB_TEST142_1(C1) VALUES(314);
INSERT INTO SCHEMA1.TAB_TEST142_1(C1) VALUES(31.4);
INSERT INTO SCHEMA1.TAB_TEST142_1(C1) VALUES(3.14);
--插入的数据超过精度,插入失败
--查询插入成功的数据
SELECT * FROM SCHEMA1.TAB_TEST142_1;
--C1插入小数位大于5的数据
INSERT INTO SCHEMA1.TAB_TEST142_1(C1) VALUES(31.67);
根据结果可看出超出标度的小数使用四舍五入的方式存入数据
--插入31成功,显示为31.0
INSERT INTO SCHEMA1.TAB_TEST142_1(C1) VALUES(31);
- BIT
对于非0非null的数据存储都为1
--C2插入几笔数据
INSERT INTO SCHEMA1.TAB_TEST142_1(C2) VALUES(1);
INSERT INTO SCHEMA1.TAB_TEST142_1(C2) VALUES(0);
INSERT INTO SCHEMA1.TAB_TEST142_1(C2) VALUES(3);
--查询插入成功的数据
SELECT * FROM SCHEMA1.TAB_TEST142_1;
可看到插入的3查询出来显示为1,可知插入非0非null的数据均显示为1
- INT
插入的数据根据小数点后第一位四舍五入为整数
--C3插入几笔数据
INSERT INTO SCHEMA1.TAB_TEST142_1(C3) VALUES(3);
INSERT INTO SCHEMA1.TAB_TEST142_1(C3) VALUES(3.1);
INSERT INTO SCHEMA1.TAB_TEST142_1(C3) VALUES(3.5);
INSERT INTO SCHEMA1.TAB_TEST142_1(C3) VALUES(-3);
--查询插入成功的数据
SELECT * FROM SCHEMA1.TAB_TEST142_1;
--C3插入3.46
INSERT INTO SCHEMA1.TAB_TEST142_1(C3) VALUES(3.46);
可看出根据小数点后第一位四舍五入为整数
- BYTE
精度为3的整数
插入的数据根据小数点后第一位四舍五入为整数
--C4插入几笔数据
INSERT INTO SCHEMA1.TAB_TEST142_1(C4) VALUES(3);
INSERT INTO SCHEMA1.TAB_TEST142_1(C4) VALUES(3.1);
INSERT INTO SCHEMA1.TAB_TEST142_1(C4) VALUES(3.46);
INSERT INTO SCHEMA1.TAB_TEST142_1(C4) VALUES(-3.6);
--查询插入成功的数据
SELECT * FROM SCHEMA1.TAB_TEST142_1;
--C4插入4位的数,会插入失败
INSERT INTO SCHEMA1.TAB_TEST142_1(C4) VALUES(314.1);
- VARBINARY
变长二进制数据,可插入十进制数据,数据库以十六进制形式存储
--C5插入几笔数据
INSERT INTO SCHEMA1.TAB_TEST142_1(C5) VALUES(0x4058);
INSERT INTO SCHEMA1.TAB_TEST142_1(C5) VALUES(346);
INSERT INTO SCHEMA1.TAB_TEST142_1(C5) VALUES(34.6);
--插入超过定义长度的数据
INSERT INTO SCHEMA1.TAB_TEST142_1(C5) VALUES(0x2A3B4058);
--查询插入成功的数据
SELECT * FROM SCHEMA1.TAB_TEST142_1;
- REAL
数据以十进制浮点数存储
--C6插入几笔数据
INSERT INTO SCHEMA1.TAB_TEST142_1(C6) VALUES(0x4058);
INSERT INTO SCHEMA1.TAB_TEST142_1(C6) VALUES(346);
INSERT INTO SCHEMA1.TAB_TEST142_1(C6) VALUES(34.6);
--查询插入成功的数据
SELECT * FROM SCHEMA1.TAB_TEST142_1;
- FLOAT
--C7插入几笔数据
INSERT INTO SCHEMA1.TAB_TEST142_1(C7) VALUES(314);
INSERT INTO SCHEMA1.TAB_TEST142_1(C7) VALUES(314.1);
INSERT INTO SCHEMA1.TAB_TEST142_1(C7) VALUES(3141.46);
INSERT INTO SCHEMA1.TAB_TEST142_1(C7) VALUES(0xFFFFFFFFFFF);
--查询插入成功的数据
SELECT * FROM SCHEMA1.TAB_TEST142_1;
字符数据类型
1、CHAR[(长度)]/CHARACTER[(长度)]
定长字符串,最大长度由数据库页面大小决定,长度不足时,自动填充空格
2、VARCHAR[(长度)]
可变长字符串,最大长度有数据库页面大小决定
--创建一个测试表
CREATE TABLE SCHEMA1.TAB_TEST142_2
(C1 char(3),
C2 varchar(3));
--插入几笔数据
INSERT INTO SCHEMA1.TAB_TEST142_2(C1,C2) VALUES('a','A');
INSERT INTO SCHEMA1.TAB_TEST142_2(C1,C2) VALUES('aa','AA');
INSERT INTO SCHEMA1.TAB_TEST142_2(C1,C2) VALUES('aaa','AAA');
--超出定义长度,插入失败
INSERT INTO SCHEMA1.TAB_TEST142_2(C1,C2) VALUES('aaaa','AAAA');
--查询插入成功的数据
SELECT C1,BIT_LENGTH(C1),C2,BIT_LENGTH(C2) FROM SCHEMA1.TAB_TEST142_2;
根据结果可知,定长字符串在插入长度小于定义长度时,使用空格填充,可变字符串是设定一个上限,实际使用多少分配多少
多媒体数据类型
1、TEXT/LONGVARCHAR
变长字符串类型,最大长度为2G-1,用于存储唱的文本串
2、IMAGE/LONGVARBINARY
可用于存储多媒体信息中的图像类型。图像由不定长的象素点阵组成,长度最大为 2G-1 字节。该类型除了存储图像数据之外,还可用于存储任何其它二进制数据
3、BLOB
指明边变长的二进制大对象,长度最大为2G-1字节
4、CLOB
用于指明变长的字符串,最大长度2G-1字节
5、BFILE
指明存储在操作系统中的二进制文件,仅能进行只读访问
--创建一个测试表
CREATE TABLE SCHEMA1.TAB_TEST142_3
(C1 TEXT,
C2 BLOB,
C3 CLOB);
--查询插入成功的数据
SELECT * FROM SCHEMA1.TAB_TEST142_3;
无论字段值的长短,查询结果都不会直接显示,管理工具可双击查看
日期时间数据类型
1、DATE
包括年月日信息,定义了-4721-01-01,和9999-12-31之间任何一个有效的格里高利日期
2、TIME[(小数秒精度)]
time包括时、分、秒信息,定义了一个在’00:00:00.000000’和’23:59:59.999999’之间的有效时间,其中小数秒精度规定了秒字段中小数点后面的位数,取值范围0-6,缺省为0.
3、TIMESTAMP[(小数秒精度)]/DATETIME[(小数秒精度)]
包括年、月、日、时、分、秒信息,定义了一个在'- 4712-01-01 00:00:00.000000'和'9999-12-31 23:59:59.999999'之间的有效 格里高利日期时间。小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如 果未定义,缺省精度为 6
--创建一个测试表
CREATE TABLE SCHEMA1.TAB_TEST142_4
(C1 DATE,
C2 TIME,
C3 TIMESTAMP);
--插入几笔数据
INSERT INTO SCHEMA1.TAB_TEST142_4(C1,C2,C3) VALUES(CURRENT_DATE(),LOCALTIME(),SYSDATE());
INSERT INTO SCHEMA1.TAB_TEST142_4(C1,C2,C3) VALUES('2021-08-23','14:00:00','2021-08-23 14:00:00');
--查询插入成功的数据
SELECT * FROM SCHEMA1.TAB_TEST142_4;
时区数据类型
1、TIME WITH TIME ZONE 类型
TIME[(小数秒精度)]WITH TIME ZONE
带时区的time值,时区部分的实质是INTERVAL HOUR TO MINUTE, 取值范围:-12:59 与+14:00 之间
2、TIMESTAMP WITH TIME ZONE 类型
TIMESTAMP[(小数秒精度)]WITH TIME ZONE
描述一个带时区的 TIMESTAMP 值,其定义是在 TIMESTAMP 类型的后面加上时区信 息。时区部分的实质是 INTERVAL HOUR TO MINUTE 类型
3、TIMESTAMP WITH LOCAL TIME ZONE 类型
TIMESTAMP[(小数秒精度)]WITH LOCAL TIME ZONE
描述一个本地时区的 TIMESTAMP 值,能够将标准时区类型 TIMESTAMP WITH TIME ZONE 类型转化为本地时区类型,如果插入的值没有指定时区,则默认为本地时区
--创建一个测试表
CREATE TABLE SCHEMA1.TAB_TEST142_5
(C1 TIME WITH TIME ZONE,
C2 TIMESTAMP WITH TIME ZONE,
C3 TIMESTAMP WITH LOCAL TIME ZONE);
--插入几笔数据
INSERT INTO SCHEMA1.TAB_TEST142_5(C1,C2,C3) VALUES(CURRENT_TIME(),CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP());
INSERT INTO SCHEMA1.TAB_TEST142_4(C1,C2,C3) VALUES('2021-08-23','2021-08-23 14:00:00','2021-08-23 14:00:00');
--查询插入成功的数据
SELECT * FROM SCHEMA1.TAB_TEST142_5;
时间间隔数据类型
P 为时间间隔的首项字段精度 ,Q 为时间间隔秒精度
INTERVAL YEAR(P) 年间隔,即两个日期之间的年数字
INTERVAL MONTH(P) 月间隔,即两个日期之间的月数字
INTERVAL DAY(P) 日间隔,即为两个日期/时间之间的日数字
INTERVA L HOUR(P) 时间隔,即为两个日期/时间之间的时数字
INTERVAL MINUTE(P) 分间隔,即为两个日期/时间之间的分数字
INTERVAL SECOND(P,Q) 秒间隔,即为两个日期/时间之间的秒数字
INTERVAL YEAR(P) TO MONTH年月间隔,即两个日期之间的年月数字
INTERVAL DAY(P) TO HOUR日时间隔,即为两个日期/时间之间的日时数字
INTERVAL DAY(P) TO MINUTE日时分间隔,即为两个日期/时间之间的日时分数字
INTERVAL DAY(P)TO SECOND(Q)日时分秒间隔,即为两个日期/时间之间的日时分秒数字
INTERVALL HOUR(P) TO MINUTE时分间隔,即为两个日期/时间之间的时分数字
INTERVAL HOUR(P) TO SECOND(Q)时分秒间隔,即为两个日期/时间之间的时分秒数字
INTERVAL MINUTE(P) TO SECOND(Q)分秒间隔,即为两个日期/时间之间的分秒间隔
--创建一个测试表
CREATE TABLE SCHEMA1.TAB_TEST142_6
(C1 INTERVAL YEAR(1),
C2 INTERVAL MONTH(2),
C3 INTERVAL DAY(3),
C4 INTERVAL SECOND(4,4));
--插入几笔数据
INSERT INTO SCHEMA1.TAB_TEST142_6(C1,C2,C3,C4) VALUES(1,-2,76,1000);
INSERT INTO SCHEMA1.TAB_TEST142_6(C1,C2,C3,C4) VALUES(-1,3,-55,-100);
--查询插入成功的数据
SELECT * FROM SCHEMA1.TAB_TEST142_6;