一、触发器+序列
简介:
在操作数据库的时候,需要在插入数据时,需要序号自增,这时我们可以先写一个序列,然后创建触发器,在数据插入时,调用触发器,让序列自增。
假设没有序列,假设数据是录入的, 这个录数据的人肯定不能保证每个商品都是唯一的编码 。
示例图:
一、序列:
-- 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数据库 创建触发器和序列
发布评论