-- Create sequence
create sequence SEQ_ISSUE_POLICY_NONVEH
minvalue 1
maxvalue 9999999999999999999999999999
start with 3931941
increment by 1
cache 20
order;
触发器的写法
CREATE OR REPLACE TRIGGER "trg_issue_policy_nonveh_insert"
BEFORE INSERT ON "DP"."ISSUE_POLICY_NONVEH_T"
FOR EACH ROW
DECLARE
seqno NUMBER;
BEGIN
select DP.Seq_Issue_Policy_nonVeh.nextval into seqno FROM dual;
:NEW.serialno := seqno ;
END;
验证sql的写法
select
*
from dp.issue_policy_nonveh_t
where serialno /2 = 0
查询不到任何行,也就是说 所有的serialno都是奇数
实际上相对的 还有一组
查询出来的却是偶数
CREATE OR REPLACE TRIGGER "trg_issue_policy_veh_insert" BEFORE INSERT ON "DP"."ISSUE_POLICY_VEH_T" FOR EACH ROW
DECLARE
seqno NUMBER;
BEGIN
select DP.Seq_Issue_Policy_Veh.nextval into seqno FROM dual;
:NEW.serialno := seqno ;
END;
那么实际上这两张ISSUE_POLICY_VEH_T\ISSUE_POLICY_NONVEH_T是在一个存储过程里插入的 但是他们的触发器和序列 都是独立的 为什么会有这种步长为2的情况发生?难道和我在主表insert into xxx
select select /*+parrallel (a,4) (m,4) (pa,4) (pt,4) */ 有关? ------最佳解决方案-------------------- RAC服务器,进程都可能影响到SEQ
因为有Cache参数的存在,故SEQ完全可能出现不连续的现象
如果需要连续的数值,应将cache设置为0,但是这样效率很低 ------其他解决方案-------------------- select DP.Seq_Issue_Policy_Veh.nextval FROM dual;
select DP.Seq_Issue_Policy_Veh.nextval FROM dual;