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,结束。 有类似问题的
都可以联系讨论。