Oracle中sequence的创建和sequence的触发器的创建

来源:互联网 发布:数据透视表怎么用 编辑:程序博客网 时间:2024/06/05 05:57

首先查看自己用户是否有增加sequence的权限

如果没有的话
添加权限
conn sys/password as sysdba
grant create sequence to 用户;

Orcale添加sequence:

CREATE sequence ZhouMM –创建的sequence的名字
minvalue 1 –最小值从几开始
maxvalue 999999999 –最大值到多少
start WITH 1 –从多少开始
INCREMENT BY 1 –每次添加多少
cache 100 –如果连接锻炼最大缓存数量为100
order;

DB2的写法:

create sequence seq_test
as bigint
start with 20000
increment by 1
minvalue 10000
maxvalue 99999999999999999
cycle
cache 20
order;

PostgreSQL的写法:

create sequence seq_test
increment by 1
minvalue 10000
maxvalue 99999999999999999
start 20000
cache 20
cycle; –一直循环添加

Sequence的修改

修改前提是sequence 的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .
  Alter sequence 的例子:
  ALTER SEQUENCE emp_sequence
  INCREMENT BY 10
  MAXvalue 10000
  CYCLE   – 到10000后从头开始
  NOCACHE
  影响Sequence的初始化参数:
  SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。
  也可以这样
  alter sequence mySeq maxvalue 500
  注意:不能改start with,其他随便改(设置minvalue值的时候不能大于当前值)

如果没有添加触发器的话,需要这样插入**

insert into TabkInfo11(INSTRUCTIONNUMBER,name)value(ZhouMM.nextval,'小白');

这样就会实现INSTRUCTIONNUMBER字段的自增了

如果添加了触发器就可以

insert into TabkInfo11(INSTRUCTIONNUMBER,name)value('','小白');

这样就可以实现自增了

添加一个sequence触发器:(触发器这是orcale的写法)

CREATE or replace trigger ZhouMM_Increate –触发器的名字
before insert on TASKINFO11 –来源表
FOR each row
DECLARE
nextid NUMBER
BEGIN
IF:new.INSTRUCTIONNUMBER IS NULL or :NEW.INSTRUCTIONNUMBER = 0 THEN
SELECT ZhouMM.nextval –先前建立的sequence
into nextid
FROM sys.DUAL;
:new.INSTRUCTIONNUMBER = nextid;
end if;
end ZhouMM_Increate;

(如果上面的方法出现,创建成功但是编译错误的话使用下面的)或者

create trigger ZhouMM11 before insert on TASKINFO11
– ZhouMM11创建的触发器
–TASKINFO11 表名
for each row
begin
select ZhouMM.nextval into :new.INSTRUCTIONNUMBER from dual;
–INSTRUCTIONNUMBER要自增的字段
end;

如何修改sequence的权限(将用户aaa下的sequence查询权限分配给用户bbb):

conn aaa/aaa
grant select on sequencename to bbb
conn bbb/bbb
select aaa.sequencename.nextval from dual

授予和收回权限:

grant select on seq_teammember_id to aaa
revoke select on seq_teammember_id from bbb

1 0
原创粉丝点击