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

    xiaoxiao2021-12-14  22

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

    转载请注明原文地址: https://ju.6miu.com/read-963426.html

    最新回复(0)