服务器操作指令
查看数据库全局变量 db2set
查看数据库版本(可以看得到数据库的安装位置) db2level
查看当前数据库管理实例 db2 get instance
踢出所有应用 db2 force application
删除数据库:db2 drop db crmdb
创建数据库:db2 create database crmdb on '/db2acrmdata1/acrmdb/crmusr' using codeset GBK territory CN PAGESIZE 32768
创建表空间 db2 create tablespace CRMUSR managed by database using /(/'/db2acrmdata1/acrmdb/crmusr/crmusrtablespace/'/)
连接数据库 db2 connect to crmdb user crmusr using crmusr
db2 connect to umsdb user umsusr using umsusr
断开(当前)所有数据库连接 db2 connect reset
列出所有的数据库 db2 list db directory
查看数据库节点列表 db2 list node directory
查看事务日志特性 db2 get db cfg for crmdb | grep log
查看表空间信息 db2pd -tablespaces -alldb
查看所有的表 db2 list tables for all
导出数据 db2move umsdb export
查看数据库表空间详情 db2 list tablespaces show detail(需连接数据库)
更改日志缓存大小 db2 update db cfg for crmdb using logretain off logprimary 160 logsecond 40 logfilsiz 25600(文件个数160,每个大小4k*25600=100M)
更改日志缓存位置 db2 update db cfg for crmdb using newlogpath '/db2acrmactlog/acrmdb'
创建外邦数据库
db2 catalog tcpip node NODE_UMS remote localhost server 60000
db2 create wrapper drda
db2 create server serv_ums type DB2/UDB version 9.7 wrapper "DRDA" authorization "umsusr" password "umsusr" options (NODE 'NODE_UMS',dbname 'umsdb')
db2 create user mapping for "NODE_UMS" server serv_ums options(remote_authid 'umsusr',remote_password 'umsusr')
赋予权限 db2 grant dbadm on database to user crmusr
SQL语句
1、locate("",字段);"含于字段中>0"
2、获取当前时间
SELECT CURRENT TIMESTAMP FROM SYSIBM.SYSDUMMY1;
3、日期转换
t.stat_date=date(to_char(to_date(t2.tbsdy,'yyyymmdd'),'yyyy-mm-dd'))
4、语句结构
①case when
CASE
WHEN 条件
THEN 语句
ELSE 语句
END
示例:
UPDATE
CRMUSR.TLR_INFO
SET
TLR_NAME=
CASE
WHEN TLR_NAME IS NULL
OR LENGTH(TLR_NAME)<2
THEN '农'
ELSE LEFT(TLR_NAME,LENGTH(TLR_NAME)-2)||'农'
END,
IDNUMBER=
CASE
WHEN IDNUMBER IS NULL
OR LENGTH(IDNUMBER)<6
THEN '090200'
ELSE LEFT(IDNUMBER,LENGTH(IDNUMBER)-6)||'090200'
END,
MOBILE=
CASE
WHEN MOBILE IS NULL
OR LENGTH(MOBILE)<4
THEN '9629'
ELSE LEFT(MOBILE,LENGTH(MOBILE)-4)||'9629'
END,
EXT4='';
②merge into
MERGE INTO A表
USING B表
ON A和B关联条件
WHEN MATCH THEN
执行语句(默认对A)
WHEN NOT MATCHED THEN
执行语句(默认对A)
示例:
--/
BEGIN
MERGE INTO PDM_PCUST_COMM_INFO A
USING PDM_PCUST_COMM_INFO_LD B
ON A.CUST_CORE_NO = B.CUST_CORE_NO AND A.RI_TYPE = B.RI_TYPE AND A.RI_NO = B.RI_NO
WHEN MATCHED THEN
UPDATE SET
A.PRIORITY = B.PRIORITY,
A.RI_ATTR = B.RI_ATTR,
A.RI_DATA = B.RI_DATA,
A.RI_ZIP = B.RI_ZIP,
A.RI_ADDR = B.RI_ADDR,
A.INPUTER = B.INPUTER,
A.INPUT_TM = B.INPUT_TM,
A.IS_MSG_SIGN_NUM = B.IS_MSG_SIGN_NUM,
A.IDU_FLAG = 'U',
A.IDU_DATE = date('2018-08-15')
WHEN NOT MATCHED THEN
INSERT
( A.CUST_CORE_NO ,
A.RI_TYPE ,
A.RI_NO ,
A.PRIORITY ,
A.RI_ATTR ,
A.RI_DATA ,
A.RI_ZIP ,
A.RI_ADDR ,
A.INPUTER ,
A.INPUT_TM ,
A.IS_MSG_SIGN_NUM ,
A.IDU_FLAG ,
A.IDU_DATE
)
VALUES
(
B.CUST_CORE_NO ,
B.RI_TYPE ,
B.RI_NO ,
B.PRIORITY ,
B.RI_ATTR ,
B.RI_DATA ,
B.RI_ZIP ,
B.RI_ADDR ,
B.INPUTER ,
B.INPUT_TM ,
B.IS_MSG_SIGN_NUM ,
'I',
date('2018-08-15')
);
COMMIT;
END
/
5、添加表字段
ALTER TABLE CDM_PCUST_BUSI_INF ADD COLUMN STATS_DT DATE;
ALTER TABLE CDM_PCUST_BUSI_INF DROP COLUMN STATS_DT ;
6、查看表结构
select * from sysibm.columns where table_name='表名'(34列)
select * from sysibm.syscolumns where tbname='表名'(43列更全)
db2 describe table 表名(6列,只能在db2服务器上使用命令执行)
7、查看当前用户
SELECT CURRENT USER FROM SYSIBM.SYSDUMMY1;
8、存储过程输出
CALL DBMS_OUTPUT.PUT_LINE('content');
9、查看rownum
SELECT ROW_NUMBER() OVER() AS rownum,A.* FROM CRMUSR.T_CAMP_P_KPI_TARGET_SQL A
10、定义分号
VALUES CHR(39)
11、转换为浮点类型(如果字符串有非数字会报错)
VALUES DOUBLE(字符串或数字)
12、字符串截取''之前的字符串
CASE WHEN LOCATE('',T.KPI_CD)=0 THEN T.KPI_CD WHEN LOCATE('',T.KPI_CD)>0 THEN LEFT(T.KPI_CD,LOCATE('',T.KPI_CD)-1) END
13、创建序列
CREATE SEQUENCE "CRMUSR"."SEQ_T_CAMP_P_KPI_SERI_INFO" AS BIGINT
MINVALUE 1 MAXVALUE 9999
START WITH 1 INCREMENT BY 1
CACHE 20 CYCLE NO ORDER;
14、只取前n行数据
FETCH FIRST n ROW ONLY
15、临时表操作
--创建临时表
DECLARE GLOBAL TEMPORARY TABLE
SESSION.ORG_LIST
(
BRCODE VARCHAR(30)
)
ON COMMIT PRESERVE ROWS NOT LOGGED WITH REPLACE IN CRM_UTMP32K1;
--使用临时表
INSERT INTO SESSION.ORG_LIST VALUES ();
16、在存储过程中查找
select text,routinename from syscat.routines where text like '%T_CAMP_P_KPI_SERI_RESULT%'
17、服务器导入导出
导出:export to ******.del of del (select……) 【del定界ASCII文件,ASCII字符流】
导入:load from ******.del of del insert into (表名) nonrecoverable【表状态置为nonrecoverable,防止别的操作锁表】
18、DECIMAL格式注意
可怜的db2,oracle一个round可以解决的事,db2需要各种转换
19、获取字符串的最后4位
values substr('123456789',length('123456789')-3,4)
oracle可以直接使用substr('123456789',-4,4)
20、执行一段多个SQL(文件的形式)
①修改或建立存储过程
[H144037:crmusr:/home/crmusr]vi content.sql
[H144037:crmusr:/home/crmusr]db2 -td@ -vf content.sql
②修改或建立视图
db2 -tvf ./view/T_ACC_BOND_INFO.sql
21、创建副表,复制表结构
create table CDM_PCUST_DYN_INFZ like CDM_PCUST_DYN_INF
22、特殊字符串连接(配合日期)
SET STMT = 'LOAD FROM (SELECT * FROM CDM_CCUST_BUSI_INF where STATS_DT= DATE('''||WORK_DATE||''')-1 days) OF CURSOR INSERT INTO CRMUSR.CDM_CCUST_BUSI_INF_LD NONRECOVERABLE';
CALL SYSPROC.ADMIN_CMD(STMT);
23、判断是否为月末
获取下一天:values DAY(DATE('2018-09-10') +1 DAY);
IF DAY(时间 + 1 DAY) = 1 THEN
END IF;
24、拿到重复的数据
①表 expect distinct表 (去除表中的数据)
②group by having count(*)>1