oracle固定长度主键的生成示例

开始接触oracle,觉着非常繁琐,连主键递增都要做个序列和触发器,逐渐了解后,觉着这样的设计还是非常灵活和实用的,下面的代码有注释,应该不用再多解释了。
 
可以直接用no做主键,放弃id这个字段,只是一直使用id,看不到了不舒服,所以就留着了
 
有一个小问题就是序列和触发器的执行需要加上 ”/ “这个符号,不知道有没有和我遇到一样问题的朋友,这个应该不是问题,不过希望对喜欢自己摸索的朋友一点提示。
  www.2cto.com  
/**
* 目录
*/
create table tb_cate(
id number(5) primary key,
no varchar2(5) not null,
type char(1) default 0,
name varchar2(40) not null,
describe varchar2(200),
code varchar2(30) not null,
parent number(10),
lev number(1) default 0,
create_user number(10) default 0,
update_user number(10) default 0,
createtime date,
updatetiem date);
  www.2cto.com  
 
--为表tb_cate添加注释
comment on column tb_cate.id is '目录id,从1开始,每次递增1,由序列和触发器控制';
comment on column tb_cate.no is '目录编号,5位数字,高位补0,从00001开始,每次递增1,由序列和触发器控制';
comment on column tb_cate.type is '目录类型,备用,可以设置共享目录等';
comment on column tb_cate.name is '目录名称';
comment on column tb_cate.describe is '目录描述';
comment on column tb_cate.code is '目录完整编码,例如00001/00002,不包含自身';
comment on column tb_cate.parent is '上级目录';
comment on column tb_cate.lev is '目录等级,默认0级';
comment on column tb_cate.create_user is '目录创建人,默认0为系统创建';
comment on column tb_cate.update_user is '目录最后修改人,默认0为系统创建';
comment on column tb_cate.createtime is '目录创建时间';
comment on column tb_cate.updatetiem is '目录最后修改时间';
 
--创建tb_cate.id 的序列
create sequence tb_cate_id_seq
minvalue 1 --最小值是1
nomaxvalue --没有最大值
start with 1 --0从1开始
increment by 1 --递增1
nocycle --不循环
nocache --不建缓存区
 
--创建tb_for.id的触发过程
create or replace trigger tb_cate_id_tg
before insert on tb_cate for each row when (new.id is null)
declare v_nextval number(10);--设置变量接收序列,否则序列会递增两次
begin
v_nextval := tb_cate_id_seq.nextval;--变量赋值
select v_nextval into:new.id from dual;--设置自增id
select lpad(v_nextval,5,'0') into:new.no from dual;--设置固定位数的no值
end;
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值