DB2与Oracle语法对比

一、字段类型对比

DB2类型 中文 DB2描述 Oracle类型 Oracle描述
整型
SMALLINT 小整数 范围是 -32 768 到 32 767 INTEGER
INTEGER 大整数 范围是 -2 147 483 648 到 + 2 147 483 647 见下面
BIGINT 大整数 范围为 -9 223 372 036 854 775 808 到 + 9 223 372 036 854 775 807 见下面
DECIMAL 或 NUMERIC 十进制 最大范围为 -10^31+ 1 到 10^31-1
DECIMAL(P)P最大为31
DECIMAL(P)
NUMBER(P)
P为整数位
浮点型
REAL 单精度浮点 32位近似值。可以为零,**
也可以从 -3.4028234663852886e+38 到 -1.1754943508222875e-38,
**或者从 1.1754943508222875e-38 到 3.4028234663852886e+38。
REAL NUMBER(63),精度更高
DOUBLE 或 FLOAT 双精度浮点 64位近似值。可以为零,**
也可以从 -1.7976931348623158e+308 到 -2.2250738585072014e-308,
**或者从 2.2250738585072014e-308 到 1.7976931348623158e+308。
FLOAT NUMBER(38),双精度
DECFLOAT 十进制浮点 带有小数点的 IEEE 754r 数字 NUMBER(P,S) P为整数位,S为小数位
DECIMAL(P,S) DECIMAL(P,S) P为整数位,S为小数位
固定字符串
CHAR 固定长度字符串 长度属性必须在 1-255 范围内 CHAR
可变字符串
VARCHAR 变长字符串 最大长度为32672字节,一个中文占三个字节 VARCHAR2 最大长度为每行4000字节。
CLOB 变长字符串 最多可以是 2 千兆字节减去 1 字节 (2,147,483,647 字节) 的长度 CLOB 最大长度4G
二进制字符串
BINARY 固定长度 长度属性必须在 1-255 (含) 范围内 没有
VARBINARY 可变长度 最长可以为 32,672 字节 没有
BLOB 二进制大对象 2 千兆字节减去 1 字节 (2,147,483,647 字节) BLOB 最大长度4G
时间日期
DATE 日期 由三部分组成的值 (年,月和日) DATE 带有时分秒
TIME 时间 由三部分组成的值 (小时,分钟和秒) 。
小时部分的范围为 0-24。
分钟和秒部分的范围是 0-59。
如果小时为 24 ,那么分钟和秒规范为 0。
见上
TIMESTAMP 时间戳 部分或七部分值 (年,月,日,小时,分钟,秒和可选的部分秒) TIMESTAMP DD-MM-YY(HH-MI-SS:FF3)
布尔值
BOOLEAN 布尔值 TRUE 或 FALSE 没有

注意:

  • float精度上要比dec差,dec在性能上比float差,dec精度可控,float精度不可控

二、索引、约束

2.1主键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- DB2 主键要设置非空
CREATE TABLE XWEB.TABLENAME (
COLUMN1 VARCHAR(50) NOT NULL,
CONSTRAINT TABLENAME_PK PRIMARY KEY (COLUMN1)
);
ALTER TABLE XWEB.TABLENAME ADD CONSTRAINT TABLENAME_PK PRIMARY KEY (COLUMN1);

-- Oracle
CREATE TABLE TABLENAME(
-- 注意:主键必须非空
id INT NOT NULL,
CONSTRAINT pkid PRIMARY KEY(id)
);
alter table TABLENAME add constraint pkid primary key(id);

2.2唯一索引

1
2
3
4
5
6
7
8
9
10
11
-- DB2 唯一索引
CREATE UNIQUE INDEX NEWTABLE_1_COLUMN1_IDX ON XWEB.NEWTABLE_1 (COLUMN1,COLUMN2);
-- Oracle
CREATE UNIQUE INDEX user_password_index on users(username,password);


-- DB2 唯一约束
CREATE TABLE XWEB.TABLENAME (
COLUMN1 VARCHAR(50),
CONSTRAINT TABLENAME_UN UNIQUE (COLUMN1)
);

2.3非空

1
2
3
CREATE TABLE XWEB.TABLENAME (
COLUMN1 VARCHAR(50) NOT NULL
);

2.4普通索引

1
CREATE INDEX TABLENAME_COLUMN1_IDX ON XWEB.TABLENAME (COLUMN1);

三、备注

3.1表备注

1
2
-- 表备注
COMMENT ON TABLE 库名.字段名 IS '测试表备注';

3.2字段备注

1
2
-- 字段备注
COMMENT ON COLUMN 库名.表名.字段名 IS '测试备注';

四、修改表

4.1增加字段

1
2
-- DB2
ALTER TABLE XWEB.TEST ADD 字段名 字段属性;

4.2删除字段

1
2
-- DB2
ALTER TABLE XWEB.TEST DROP COLUMN 字段名;

4.3修改字段类型

1
2
3
-- DB2
ALTER TABLE XWEB.TEST ALTER COLUMN 字段名 SET DATA TYPE 新字段属性 ;
CALL SYSPROC.ADMIN_CMD('REORG TABLE XWEB.TEST');

五、常用函数

作用 DB2方法 Oracle方法
取当前时间 NOW NOW
字符串拼接 CONCAT CONCAT
随机数 RAND RAND

六、常用操作

1
2
3
4
5
-- 快速清空大表
-- Oracle
truncate table tableName;
-- DB2
alter table tableName activate not logged initially with empty table;
1
2
3
4
5
6
7
-- 创建类似的表
-- Oracle:
create table a as select * from tableName;
-- DB2:
create table a like tableName
-- 或
create table a as(select * from hh_app.a) definition only in tbs_hh;
1
2
3
4
-- 32位大写UUID
SELECT concat (hex (RAND ()), hex (RAND ())) as uuid FROM SYSIBM.SYSDUMMY1;
-- 32位小写uuid
select lower(hex(RAND())||hex(RAND())) as uuid from sysibm.sysdummy1;

七、常用视图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- 查询当前用户有N张表
select count(*) from sysibm.SYSTABLES where creator='APP_D';
-- 查询当前DB2的版本
select * from sysibm.SYSVERSIONS;
-- 查询TABLESPACE的状况
select * from sysibm.SYSTABLESPACES;
-- 查询DB2的数据类型
select * from sysibm.SYSDATATYPES;
-- 查询BUFFERPOOLS状况
select * from sysibm.SYSBUFFERPOOLS;
-- 查看表的约束
select * from SYSCAT.CHECKS WHERE TABNAME=‘AAA';
-- 查询DB2分区
select * from syscat.DATAPARTITIONS;
-- 查看数据库的存储过程
select * from SYSCAT.PROCEDURES;
-- 查询SEQUENCE的状况
select * from sysibm.SYSSEQUENCES;