一、触发器+序列

简介:

     在操作数据库的时候,需要在插入数据时,需要序号自增,这时我们可以先写一个序列,然后创建触发器,在数据插入时,调用触发器,让序列自增。

假设没有序列,假设数据是录入的, 这个录数据的人肯定不能保证每个商品都是唯一的编码 。

示例图:

一、序列:

-- Create sequence 
create sequence CRM_SEQ_CUSTOM_CABINETS_ID //序列名称 CRM_SEQ_CUSTOM_CABINETS_ID 
minvalue 1001
maxvalue 9999999999999999999999999
start with 10001
increment by 1
cache 20;
参数名注释
minvalue最小值
maxvalue最大值
start with从....什么数量开始
increment by步长  每次增加的数字
cache缓存

二、 触发器:

CREATE OR REPLACE TRIGGER CRM_SEQ_CUSTOM_CABINETS_TOUCH //触发器名称 CRM_SEQ_CUSTOM_CABINETS_TOUCH 
  before insert on custom_cabinets //要触发的表 custom_cabinets 
  for each row
declare
  -- local variables here
begin
  select CRM_SEQ_CUSTOM_CABINETS_ID.Nextval into :new.CABINETS_THREE_CODE from dual; //触发的表字段 CABINETS_THREE_CODE
end CRM_SEQ_CUSTOM_CABINETS_TOUCH;

触发器也可以加判断:    

        判断此字段是否为空,如果为空,则调用序列。

CREATE OR REPLACE TRIGGER CRM_SEQ_CUSTOM_CABINETS_TOUCH
  before insert on custom_cabinets
  for each row
declare
  -- local variables here
begin
 IF :NEW.CABINETS_THREE_CODE IS NULL THEN 
   select CRM_SEQ_CUSTOM_CABINETS_ID.Nextval into :new.CABINETS_THREE_CODE from dual;
 END IF;  
end CRM_SEQ_CUSTOM_CABINETS_TOUCH;

     

三、序列+触发器创建示例图:

1、如何创建

2、序列+触发器都可以这样执行 , 执行完了 我去哪里找呢?

序列 示意图:

 触发器 示意图:

二、触发器实现自动编号

说明:  编号为“JD”+“yyyymmddhh24miss”+”0001”形式 

 触发器:

CREATE OR REPLACE TRIGGER xj_order_number --触发器名
  before insert on xj --表名
  for each row  --行级 触发
declare
  -- local variables here
  v_on varchar2(10);
begin
   if :new.ordernumber is null then
    begin
      select trim(to_char(max(substr(t.ordernumber, 18)) + 1, 'fm0009'))
        into v_on
        from xj t
       where instr(substr(trim(t.ordernumber),0,17), to_char(sysdate, 'yyyymmddhh24miss')) > 0
         and t.customersno is not null;
    exception
      when others then
        v_on := '0001';
    end;
    if trim(v_on) is null then
      v_on := '0001';
    end if;
    select 'JD'||to_char(sysdate, 'yyyymmddhh24miss') || v_on
      into :new.ordernumber
      from dual;
  end if;
end xj_order_number;

 示例图:

更多推荐

Oracle数据库 创建触发器和序列