首先查看自己用戶是否有增加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