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,結束。 有類似問題的
都可以聯系討論。