自动生成列:

1.在创建表的时候通过generated字句指定;

2.支持两个选项,generated always和generated by default.

   1)generated always:DB2控制值的生成,如果指定了值,将会报错;

   2)generated by default:如果指定了值,DB2将不会帮你生成值,因此不能保证数据的

      唯一性;

举例:

create table payroll

(employee_id int not null,

 base_salary  double,

 bonus double,

 commission double,

 total_pay double generated always as

                          (base_salary *(1 + bonus) + commission)

下面的两条语句,将产生相同的结果:

insert into payroll values(1,100,0.1,20,DEFAULT);    -- DEFAULT是DB2的保留字

insert into payroll (employee_id,base_salry,bonus,commission)

 values(1,100,0.1,20);

如何使用identity列和sequence对象:

作用:

用于生成雇员编号、订单号、票号码等,它的优点是能保证唯一性,比通过应用程序去实现速度要快。identity列和sequence对象具有下列属性:

start with            第一个值           

increment by            每次增加的值,缺省是1,通过它控制降序和升序           

minvalue /no minvalue            控制是否有最小值           

maxvalue/no maxvalue            控制是否有最大值           

cycle/nocycle            是否循环使用           

cache/no cache/cache 20            是否缓存值,缺省是20个值;但DB2重启之后会丢失值,造成数值不连续;

create table service_rq

         (  rqid smallint not null constraint rqid_pk primary key,

            accum_rqnum integer not null

                  generated always as identity

                  ( start with 1

                    ,increment by 1

                    ,cache 10)

5)通过函数identity_val_local可以检索出上一个语句生成的identity列

    的值

     select identity_val_local()  into p_accum_rqnum from sysibm.sysdummy1;

     values identity_val_local() into p_accum_rqnum;

6)如果在一个insert语句中插入多条记录,identity_val_local将返回空值

    insert into service_rq(rqid,accum_rqnum) values(30000,DEFAULT),(30001,DEFAULT);

7)identity列的属性可以通过alter table来修改,其中restart with语句最常用;

2.sequence

1)sequence也用于自动生成值,它和identity列的区别是不绑定到特定的表,是全局的,

   单独创建的对象,可以用于任何一个表。

2)创建

   create sequence staff_seq as integer

               start with 360

               increment by 10

               no maxvalue

               no cycle

               cache 10

3)修改属性

    通过alter sequence可以修改下列属性:

      restart with     minvalue /no minvalue    maxvalue/no maxvalue    cycle/ no cycle

      increment by     cache <integer constant>/ no cache

4)删除sequence

    drop sequence <sequence-name>

5)使用sequence对象需要的权限

    grant usage on sequence < sequence object name> to public

6.检索生成的值

    通过两个表达式来实现:

    next value     – 下一个值;

    previous value      – 当前的值;

 

create procedure seqexp ( out p_prevval1 int,

                                           out p_nextval1 int,

                                           out p_nextval2 int,

                                           out p_prevval2 int )

language sql

specific seqexp

begin

    declare v_prevstaffno int;

    insert into staff (id,name,dept,job,year,salary,comm)

               values (next value for staff_seq,’bush’,55,’mgr’,30,null,null);

    update staff  set  id =( next value for staff_seq ) where name=‘bush’;

    values previous value for staff_seq into v_prevstaffno;

    delete from staff  where id = v_prevstaffno;

          values ( previous value fro staff_seq           -- (1)

                      ,next value for staff_seq

                      ,next value for staff_seq

                      ,previous value fro staff_seq )

          into p_prevval1,p_nextval1,p_nextval2,p_prevval2;

end



需要注意的是:在行1中,如果在一个语句中多次引用同一个sequence对象,next value和previous value将只执行一次;假设staff_seq最后生成的值为500,那么行1中返回值分别为500、510、510、500。

收藏于 2011-01-30
来自于百度空间

DB2 autoincretment(抄袭)的更多相关文章

  1. DB2数据类型(抄袭)

    数字 数据类型        精度          最小值                                        最大值                       smal ...

  2. DB2重启数据库实例

    DB2重启数据库实例时,有时停止实例会失败,此时需要先确认没有应用链接数据库,然后再关闭数据库实例,并重新启动. 1.查看是否有活动的链接 命令:db2 list applications for d ...

  3. 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗

    ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性:    Oracle.MYSQL与DB2可在所有主流平台上运行:    SQL Server只能在Windows下运行: --安 ...

  4. C# 连接DB2字符串 Oracle免安装客户端连接字符串

    以下是DB2连接数据库 1)使用IBM.Data.DB2链接DB2数据库 2)必须安装DB2客户端,IBM.Data.DB2在安装的BIN里可以找到 3)注意一下DB2客户端版本问题,我的就是WIN7 ...

  5. DB2错误码信息

    00 完全成功完成 表 3  01 警告 表 4  02 无数据 表 5  07 动态 SQL 错误 表 6  08 连接异常 表 7  09 触发操作异常 表 8  0A 功能部件不受支持 表 9  ...

  6. DB2数据库参数建议(AIX)

    修改用户最大进程数: chdev -l sys0 -a maxuproc=' 用户资源配置:对实例用户,fence用户,应用用户添加如下限制: db2inst1 : fsize=- fsize_har ...

  7. db2定界符

    在DB2数据库中,在导出DEL文件时,默认的字符分隔符是".字段分隔符是, (逗号).有一个需求是要为Oracle数据库提供数据,因此就想使用"|"作为数据的字段分隔符. ...

  8. db2基础

    DB2知识文档 一.db2 基础 基本语法 注释:"--"(两个减号) 字符串连接:"||" 如set msg='aaaa'||'bbbb',则msg为'aaa ...

  9. db2 日期时间格式

    db2日期和时间常用汇总 1.db2可以通过SYSIBM.SYSDUMMY1.SYSIBM.DUAL获取寄存器中的值,也可以通过VALUES关键字获取寄存器中的值. SELECT 'HELLO DB2 ...

随机推荐

  1. memcache.so的报错信息,未解决

    memcache.so php版本5.6 executor_globals_id in Unknown on line 0 编译也成功了,路径也是在其他so文件的目录 但是加载失败的,查看apache ...

  2. zabbix 监控windows端cpu使用率百分比

    参考网站:http://www.fyluo.com/?post=108 zabbix自带的模版没有CPU使用率(百分比)这个监控项,那么我们可以通过添加计数器的方式实现CPU百分比的监控. 在zabb ...

  3. jap _spring _maven

    pom.xm <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3 ...

  4. [ilink32 Error] Fatal: Unable to open file 'RM_COMMON.OBJ'

    [ilink32 Error] Fatal: Unable to open file 'RM_COMMON.OBJ' [ilink32 Error] Fatal: Unable to open fil ...

  5. Utils使用

    获取两个时间之间的天数 var startDate = new Date(_startDate).getTime(); var endDate = new Date(_endDate).getTime ...

  6. SAP PP中关于工单报工的小解

    一般来说工单确认的方法很多,这里就简要介绍下几种常见的报工方法: 1.co11n 是大家常用的方法之一,也是比较好用,产量,报废,返工,工时,货物移动都可以输入.介于我们公司的业务我们用这个报工是最多 ...

  7. UI5-文档-4.38-Accessibility

    作为本教程的最后一步,我们将改进应用程序的可访问性. 为此,我们将添加ARIA属性.屏幕阅读器使用ARIA属性识别应用程序结构并正确解释UI元素.通过这种方式,我们可以让我们的应用程序对那些使用电脑有 ...

  8. Java并发测试

    要求:模拟200个设备,尽量瞬间并发量达到200. 思路 第一种:线程池模拟200个线程——wait等待线程数达200——notifyAll唤醒所有线程 第二种:线程池模拟200个线程——阻塞线程—— ...

  9. JAVA NIO学习记录1-buffer和channel

    什么是NIO? Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.NIO与原来的IO有同样的作用和目的,但是使用的方式完全不 ...

  10. DateUtil日期处理

    package com.zjx.util; import java.text.SimpleDateFormat; import java.util.Date; public class DateUti ...