日期:2014-05-16  浏览次数:20434 次

创建表和表的自增
-- 创建表(联合主键)
-- serviceid 是用于自增
create table eos_serviceitems(
serviceid number not null,
serviceno varchar2(100) not null,
servicename varchar2(100) not null,
servicetypeno varchar2(50) not null,
unit varchar2(20) not null,
unitprice number(10,2) not null,
companyid varchar2(30) not null,
deleteflag number(1) not null,
crname varchar2(50),
crtime timestamp,
chname varchar2(50),
chtime timestamp,
primary key(serviceid,serviceno)
)

-- 查询表
select * from eos_serviceitems

-- 删除表
drop table eos_serviceitems

-- 创建表的自增序列
create sequence eos_serviceitems_sequ
    increment by 1       -- 每次增加的个数
      start with 1       -- 从几开始计数
      nomaxvalue         -- 设置最大值到多少。这里是不设置
      nocycle            -- 一直累加,不循环
      cache;             --指定在内存中可以预分配的序列号个数(默认值:20)

-- 创建触发器
create trigger eos_serviceites before
       insert on eos_serviceitems for each row
           begin
              select eos_serviceitems_sequ.nextval into:new.serviceid from dual;
           end;
-- 新增数据
insert into eos_serviceitems(serviceno, servicename, servicetypeno, unit, unitprice, companyid, deleteflag)
values('FW001', '001服务名称', 'FWLB001', '一件', 15.5, 'GSID001',1);


对sequence说明:
increment by :用于指定序列增量(默认值:1),如果指定的是正整数,则序列号自动递增,如果指定的是负数,则自动递减。
start with :用于指定序列生成器生成的第一个序列号,当序列号顺序递增时默认值为序列号的最小值 当序列号顺序递减时默认值为序列号的最大值。
Maxvalue:用于指定序列生成器可以生成的组大序列号(必须大于或等于start with,并且必须大于minvalue),默认为nomaxvalue。
Minvalue:用于指定序列生成器可以生成的最小序列号(必须小于或等于starr with,并且必须小于maxvalue),默认值为nominvalue。
Cycle:用于指定在达到序列的最大值或最小值之后是否继续生成序列号,默认为nocycle。
Cache:用于指定在内存中可以预分配的序列号个数(默认值:20)。
在sequence中应注意:
1、 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。
2、 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再 取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。