DB2学习笔记chensy(5)

2019-03-09 16:09

深入浅出DB2

( SELECT * FROM VIRGO.EMPLOYEE ) DEFINITION ONLY WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED ; DECLARE GLOBAL TEMPORARY TABLE SESSION.EMPLOYEE_PRE AS ( SELECT * FROM VIRGO.EMPLOYEE ) DEFINITION ONLY WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED ; DECLARE GLOBAL TEMPORARY TABLE SESSION.EMPLOYEE_INS AS ( SELECT * FROM VIRGO.EMPLOYEE ) DEFINITION ONLY WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED ; DECLARE GLOBAL TEMPORARY TABLE SESSION.EMPLOYEE_DEL AS ( SELECT * FROM VIRGO.EMPLOYEE ) DEFINITION ONLY WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED ; P2:BEGIN SET V_START_TS = CURRENT TIMESTAMP - CURRENT TIMEZONE;

SET OUT_SQLMSG = 10; DELETE VIRGO.EMPLOYEE

WHERE DAT_STRT_DT = IN_TX_DATE; SET OUT_SQLMSG = 20; UPDATE VIRGO.EMPLOYEE

SET DAT_END_DT = V_MAX_DATE WHERE DAT_END_DT = IN_TX_DATE; --2、向当前数据临时表插数据 SET OUT_SQLMSG = 30;

INSERT INTO SESSION.EMPLOYEE_CUR SELECT T1.EMP_NO ,T1.EMP_NAME ,T1.DEPT

,T1.BIRTHDAY ,'EMPLOYEE'

,CURRENT TIMESTAMP ,USER ,'N'

,IN_TX_DATE ,V_MAX_DATE

FROM LEO.EMPLOYEE T1 WITH UR; SET OUT_SQLMSG = 40; --3、向昨日临时表插入数据

INSERT INTO SESSION.EMPLOYEE_PRE

第16页

深入浅出DB2

SELECT * FROM VIRGO.EMPLOYEE

WHERE DAT_END_DT = V_MAX_DATE WITH UR;

--4、比较数据,新增数据插入临时表 INS , 删除数据插入临时表 DEL SET OUT_SQLMSG = 50;

INSERT INTO SESSION.EMPLOYEE_INS SELECT T1.*

FROM SESSION.EMPLOYEE_CUR T1

LEFT JOIN SESSION.EMPLOYEE_PRE T2 --比较所有字段 ON COALESCE(T1.EMP_NO,'') = COALESCE(T2.EMP_NO,'')

AND COALESCE(T1.EMP_NAME,'') = COALESCE(T2.EMP_NAME,'') AND COALESCE(T1.DEPT,'') = COALESCE(T2.DEPT,'')

AND COALESCE(T1.BIRTHDAY,TO_DATE('1900-01-01','YYYY-MM-DD')) = COALESCE(T2.BIRTHDAY,TO_DATE('1900-01-01','YYYY-MM-DD')) WHERE T2.EMP_NO IS NULL WITH UR;

--5、比较数据, 删除数据插入临时表 DEL SET OUT_SQLMSG = 60;

INSERT INTO SESSION.EMPLOYEE_DEL SELECT T1.*

FROM SESSION.EMPLOYEE_PRE T1

LEFT JOIN SESSION.EMPLOYEE_CUR T2 --比较所有字段 ON COALESCE(T1.EMP_NO,'') = COALESCE(T2.EMP_NO,'')

AND COALESCE(T1.EMP_NAME,'') = COALESCE(T2.EMP_NAME,'') AND COALESCE(T1.DEPT,'') = COALESCE(T2.DEPT,'')

AND COALESCE(T1.BIRTHDAY,TO_DATE('1900-01-01','YYYY-MM-DD')) = COALESCE(T2.BIRTHDAY,TO_DATE('1900-01-01','YYYY-MM-DD')) WHERE T2.EMP_NO IS NULL WITH UR;

----------------6、插入新增数据 INS , 封口删除数据 DEL-----------------

SET OUT_SQLMSG = 70;

UPDATE VIRGO.EMPLOYEE T1 SET DAT_END_DT = IN_TX_DATE WHERE EXISTS (

SELECT 1

FROM SESSION.EMPLOYEE_DEL T2

WHERE COALESCE(T1.EMP_NO,'') = COALESCE(T2.EMP_NO,'') AND COALESCE(T1.EMP_NAME,'') = COALESCE(T2.EMP_NAME,'') AND COALESCE(T1.DEPT,'') = COALESCE(T2.DEPT,'')

AND COALESCE(T1.BIRTHDAY,TO_DATE('1900-01-01','YYYY-MM-DD')) = COALESCE(T2.BIRTHDAY,TO_DATE('1900-01-01','YYYY-MM-DD')) WITH UR ) ;

SET OUT_SQLMSG = 80;

INSERT INTO VIRGO.EMPLOYEE

SELECT * FROM SESSION.EMPLOYEE_INS WITH UR;

SET OUT_SQLMSG = 81;

DROP TABLE SESSION.EMPLOYEE_CUR; DROP TABLE SESSION.EMPLOYEE_PRE; DROP TABLE SESSION.EMPLOYEE_INS; DROP TABLE SESSION.EMPLOYEE_DEL;

--------------------------拉链算法结束------------------------

第17页

深入浅出DB2

SET OUT_SQLMSG = 90;

CALL CORE_ADMIN.CORE_INS_LOG_PROC(V_PROC_NM, V_START_TS,NULL,V_SCHEMA_NM,'D', NULL, NULL, OUT_SQLCODE , OUT_SQLSTATE); IF (

OUT_SQLCODE < 0 ) THEN SET OUT_SQLERRMC = 'Error in CORE_ADMIN.CORE_INS_LOG_PROC '; SIGNAL SQLSTATE OUT_SQLSTATE SET MESSAGE_TEXT = OUT_sqlerrmc; ELSE IF ( V_INS_ROW_IND = 'N' ) THEN SET OUT_sqlerrmc = 'Stored Procedure Finished Successfully, Nothing inserted as row_id already exists'; ELSE SET OUT_sqlerrmc = 'Stored Procedure Finished Successfully'; END IF; SET OUT_SQLMSG = 999; SELECT SQLCODE, SQLSTATE INTO OUT_SQLCODE, OUT_SQLSTATE FROM SYSIBM.SYSDUMMY1; END IF; END P2; END P4;

END P1

4.4 Oracle拉链算法实例

5 函数

5.1 一般函数

第18页

5.2 Db2正则表达式

6 存储

6.1 分区表

7 权限管理

7.1 用户列表

--dmdata --rawdata --cmnref --libra --librisk --core_admin --param --virgo --leo --oracle --img --sunflow --sjxt --db2fenc --db2inst --jcm

深入浅出DB2

第19页

深入浅出DB2

7.2 常用授权命令

如果具有 SYSADM 权限的用户创建数据库,那么将自动授予用户对该数据库的 DATAACCESS、ACCESSCTRL、SECADM 和 DBADM 权限

--授权数据库管理权限给用户

db2grant dbadm on database to user db2admin --给予创建用户和schema的权限

--授权数据库管理权限给用户

db2grant secadm on database to user db2admin --给予创建角色的权限

--授权数据库管理权限给用户组

db2 grant dbadm on database to group db2grp1 --授权查询:

db2grant select on table tableName to user db2admin --全部授权

DB2 GRANTALL ON TABLE OWK.\

7.3 DB2权限详解

一、DB2权限简介

DB2数据库权限分为实例权限级别(SYSADM、SYSCTRL、SYSMAINT、SYSMON)和DB2数据库权限级别(DBAMD、LOAD)。SYSCTRL、SYSMAINT、SYSMON权限级别的用户不能访问数据,DBAMD、LOAD权限级别的用户可以访问数据。 实例级别权限(只能在用户组级别上进行分配):

SYSADM ----系统管理权限(UNIX系统中,SYSADM用户组默认地设置为实例拥有者所在的主用户组,因此,该组中的任何用户都拥有SYSADM权限) SYSCTL---- 系统控制权限 SYSMAINT---- 系统维护权限 数据库级别:

dbadm---- 数据库管理权限(不能执行诸如删除数据库、创建和删除表空间、备份或者恢复数据库等等维护性和管理任务) load---- 对表进行load操作的权限

1、 DB2数据库权限:

第20页


DB2学习笔记chensy(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:表7-2 钢筋安装质量检验记录(梁、板)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: