oracle生成流水号

1:用sequence序列生成流水号 

create sequence L_SIGN_IN
minvalue 1
maxvalue 9999999999999999999999999999
start with 1
increment by 1
cache 20;

这里是生成了序列l_sign_in,最小值为1,增量为1,从1开始,最大值为9999999999999999999999999999,缓存为20.

我们可以用l_sign_in.nextval可获取序列的值。

2:利用日期直接生成 to_char(sysdate,'yyyymmdd')此外还可加上别的字符进行拼接。

例如日志的编号就可以定为LOG||sysdate。

3:特殊的生成方法。现在好多编号都要求可以删,删了之后还可以利用,前面根据选项进行拼接。

  for k in 0..99 loop
  n:=to_char(k);
  if k<10 then
    v_lab_no:=trim('10010'||v_dcode||'0'||n);
  else
      v_lab_no:=trim('10010'||v_dcode||n);
  end if;

  select count(*) into v_count from l_lab_def where trim(lab_no)=trim(v_lab_no);
  if v_count!=0 then b:=b+1;

  else
return;
end if;
end loop;

 这里是根绝v_dcode(部门编号)生成一个v_lab_no(实验室编号),规则是10010加上部门号加上两位流水号。

这里是用变量k循环出两位流水号,假设部门编号v_dcode=123,先从0开始,k=0,生成实验室编号为10010123||'0'||'0'即

v_lab_no=1001012300,然后根据实验室编号在数据库检验,若已存在该编号,循环k=1,否则return,结束。 有类似问题的

都可以联系讨论。

 

你可能感兴趣的:(oracle生成流水号)