前段時間做了數據表拆分,進行數據遷移,用到一些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)