DB2 存储过程创建、系统表
前段时间做了数据表拆分,进行数据迁移,用到一些SQL命令,语句记录下来
db2look是DB2用于生成数据库DDL语句的一个工具:
命令:db2look -d DBname -a -e -p -i userID -w password -o d:\sample.sql
db2look -d:数据名称 -e:抽取复制数据库所需DDL -t:生成指定表统计信息 pjnl
参数比较多这边就没列举,主要用到以上就可以查询到DDL。
DB2 系统表
目录视图 | 描述 | 查询实例 |
SYSCAT.CHECKS | 检查约束包含一行记录 | select constname, tabname, text from syscat.checks |
SYSCAT.COLCHECKS | 检查约束所引用的每一列包含一行记录 | select constname, tabname, colname, usage from syscat.colchecks |
SYSCAT.COLUMNS | 指明一列是可为空(Y)还是不可为空(N) |
select tabname, colname, nulls from syscat.columns where nulls = 'N' select sum(length) from syscat.columns where tabname='';查看列大小 |
SYSCAT.CONSTDEP | 为某些其他对象上的约束的每个依赖性包含一行记录 | select constname, tabname, btype, bname from syscat.constdep |
SYSCAT.INDEXES | 为每个索引包含一行记录 | select tabname, uniquerule, made_unique, system_required from syscat.indexes |
SYSCAT.KEYCOLUSE | 查看表主键 | select constname, tabname, colname, colseq from syscat.keycoluse |
SYSCAT.REFERENCES | 为每个参照约束包含一行记录 | select constname, tabname, refkeyname, reftabname, colcount, deleterule, updaterule from syscat.references |
SYSCAT.TABCONST | 为每个惟一(U)主键(P)外键(F)或表检查(K)约束包含一行记录 | select constname, tabname, type from syscat.tabconst |
SYSCAT.TABLES | 该表的父表数目(该表在其中充当子表的参照约束数目) | select tabname, parents from syscat.tables where parents > 0 |
SYSCAT.TABLES | 该表的子表数目(该表在其中充当父表的参照约束数目) | select tabname, children from syscat.tables where children > 0 |
SYSCAT.TABLES | 该表的自引用参照约束数目(该表在其中既充当父表又充当子表的参照约束数目) | select tabname, selfrefs from syscat.tables where selfrefs > 0 |
SYSCAT.TABLES | 在该表上所定义的惟一约束(除了主键)的数目 | select tabname, keyunique from syscat.tables where keyunique > 0 |
SYSCAT.TABLES | 在该表上所定义的检查约束的数目 | select tabname, checkcount from syscat.tables where checkcount > 0 |
--/
CREATE PROCEDURE PROC_JNL(IN IN_TRANSDATE DATE,IN NUM INTEGER) LANGUAGE SQL P1: BEGIN DECLARE V_MAX_PJNL INTEGER; DECLARE V_MIN_PJNL INTEGER; DECLARE V_COUNT INTEGER; SELECT MAX(JNLNO),MIN(JNLNO) INTO V_MAX_PJNL,V_MIN_PJNL FROM PJNL_HIS WHERE TRANSDATE > IN_TRANSDATE; SET V_COUNT= V_MIN_PJNL; P2: BEGIN WHILE V_MIN_PJNL<=V_MAX_PJNL DO SET V_COUNT=V_MIN_PJNL+NUM;--每次进来检查是否大于最大值 IF V_MIN_PJNL > V_MAX_PJNL THEN SET V_COUNT=V_MAX_PJNL+1; END IF; INSERT INTO PJNL SELECT * FROM PJNL_HIS WHERE JNLNO >=V_MIN_PJNL and JNLNO < V_COUNT; commit; INSERT INTO PJNLDATA SELECT * FROM PJNLDATA_HIS WHERE JNLNO >=V_MIN_PJNL and JNLNO <V_COUNT; commit; SET V_MIN_PJNL=V_MIN_PJNL+NUM; END WHILE; END P2; END P1
/
执行方式: CALL PROC_JNL('2017-10-10',50000);
DB2有五种约束:
-
NOT NULL 约束是这样一种规则,它防止在表的一列或多列中输入空值。
-
唯一约束(也称为唯一键约束)是这样一种规则,它禁止表的一列或多列中出现重复值。唯一键和主键是受支持的唯一约束。例如,可对供应商表中的供应商标识定义唯一约束以确保不会对两个供应商指定同一供应商标识。
-
主键约束是与唯一约束具有相同属性的一列或列的组合。可使用主键和外键约束来定义表之间的关系。
-
外键约束(也称为引用约束或引用完整性约束)是关于一个或多个表中的一列或多列中的值的一种逻辑规则。例如,一组表共享关于公司的供应商的信息。供应商的名称有时可能会更改。可定义一个引用约束,声明表中的供应商的标识必须与供应商信息中的供应商标识相匹配。此约束会阻止可能导致丢失供应商信息的插入、更新或删除操作。
-
(表)检查约束(也称为检查约束)对添加至特定表的数据设置限制。例如,表检查约束可确保每当在包含个人信息的表中添加或更新薪水数据时,职员的薪水级别至少为 $20000。
创建 Not null:
db2 "alter table tabname ALTER colname drop not null"
db2 "alter table t01 ALTER colname set not null"
创建、删除唯一约束:
db2 "alter table tabname add unique(colname)"
db2 "alter table tabname drop unique CONSTNAME "
创建主键约束:
db2 "alter table staff add primary key (id)"
创建外键约束:
db2 alter table project add foreign key (respemp) references employee on delete cascade
表检查约束:
db2 alter table employee add constraint phoneno_length check (length(rtrim(phoneno)) = 4)