Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2786928
  • 博文数量: 423
  • 博客积分: 7770
  • 博客等级: 少将
  • 技术积分: 4766
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 11:58
个人简介

Oracle/DB2/Postgresql/Mysql/Hadoop/Greenplum/Postgres-xl/Mongodb

文章分类

全部博文(423)

文章存档

2019年(3)

2018年(6)

2017年(27)

2016年(23)

2015年(30)

2014年(16)

2013年(31)

2012年(73)

2011年(45)

2010年(14)

2009年(30)

2008年(30)

2007年(63)

2006年(32)

分类: DB2/Informix

2017-01-11 12:20:15


一、新建测试表:

[db2inst1@db2 ~]$ db2 "create table emp(id integer,name char(10),salary integer)"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 "insert into emp values(1001,'SAM',10000)"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 "insert into emp values(1002,'PAM',9500)"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 "insert into emp values(1003,'MAM',12500)"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 "insert into emp values(1004,'DAM',7500)"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 "insert into emp values(1005,'KAM',20000)"
DB20000I  SQL 命令成功完成。

二、添加保留列
[db2inst1@db2 ~]$ db2 "alter table emp add column rev_salary integer generated always as (salary*50/100)"
DB21034E  该命令被当作 SQL
语句来处理,因为它是无效的“命令行处理器”命令。在 SQL
处理期间,它返回:
SQL20054N  表 "DB2INST1.EMP"
所处的状态对该操作无效。原因码:"22"。  SQLSTATE=55019
[db2inst1@db2 ~]$ 


三、查看出错代码


[db2inst1@db2 ~]$ db2 ? "SQL20054N"

SQL20054N  表 "<表名>" 所处的状态对该操作无效。原因码:"<原因
      码>"。


说明: 


该表所处的状态不允许执行该操作。"<原因码>" 指示阻止执行该操作的表所处的
状态。



22       


         在改变该表之前使用 SET INTEGRITY FOR "<表名>" OFF。然后改变表
         并使用 SET INTEGRITY FOR "<表名>" IMMEDIATE CHECKED FORCE 
         GENERATED 来为新列或已改变的列生成值。



四、关闭表完整性检查


[db2inst1@db2 ~]$ db2 set integrity for emp off
DB20000I  SQL 命令成功完成。

五、添加保留列
[db2inst1@db2 ~]$ db2 "alter table emp add column rev_salary integer generated always as (salary*50/100)"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 load query table emp
表状态:
  设置完整性暂挂
[db2inst1@db2 ~]$ db2 set integrity for emp immediate checked force generated
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 load query table emp
表状态:
  正常


六、检查添加情况
[db2inst1@db2 ~]$ db2 "select * from emp"


ID          NAME       SALARY      REV_SALARY 
----------- ---------- ----------- -----------
       1001 SAM              10000        5000
       1002 PAM               9500        4750
       1003 MAM              12500        6250
       1004 DAM               7500        3750
       1005 KAM              20000       10000


  5 条记录已选择。


[db2inst1@db2 ~]$

[db2inst1@db2 ~]$  db2 "insert into emp(ID, NAME, SALARY)values(1006,'DAAd',70000)"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 "select * from emp"


ID          NAME       SALARY      REV_SALARY 
----------- ---------- ----------- -----------
       1001 SAM              10000        5000
       1002 PAM               9500        4750
       1003 MAM              12500        6250
       1004 DAM               7500        3750
       1005 KAM              20000       10000
       1006 DAAd             70000       35000


  6 条记录已选择。



七、修改保留列属性如操作以添加方法一致


[db2inst1@db2 ~]$ db2 "alter table emp alter column rev_salary set expression as (salary*20/100)"
DB21034E  该命令被当作 SQL
语句来处理,因为它是无效的“命令行处理器”命令。在 SQL
处理期间,它返回:
SQL20054N  表 "DB2INST1.EMP"
所处的状态对该操作无效。原因码:"22"。  SQLSTATE=55019
[db2inst1@db2 ~]$ db2 set integrity for emp off
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 "alter table emp alter column rev_salary set expression as (salary*20/100)"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 load query table emp
表状态:
  设置完整性暂挂
[db2inst1@db2 ~]$ db2 set integrity for emp immediate checked force generated
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 load query table emp
表状态:
  正常
[db2inst1@db2 ~]$  db2 "insert into emp(ID, NAME, SALARY)values(1007,'HAAd',80000)"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 "select * from emp"


ID          NAME       SALARY      REV_SALARY 
----------- ---------- ----------- -----------
       1001 SAM              10000        2000
       1002 PAM               9500        1900
       1003 MAM              12500        2500
       1004 DAM               7500        1500
       1005 KAM              20000        4000
       1006 DAAd             70000       14000
       1007 HAAd             80000       16000


  7 条记录已选择。


[db2inst1@db2 ~]$ 


参考:http://db2luwacademy.blogspot.hk/2016/12/db2-luw-tips-n-tricks-part-3.html?view=timeslide
阅读(2143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~