当前位置:操作系统 > Unix/Linux >>

产生十六进制的流水号

产生十六进制的流水号
 
需求如下:
 
求一个Function, 用 0~9,A~F  这几个数字及字母,产生流水号,,产生的数据如下 格式:
00000,00001,00002,00003,00004,00005,00006,00007,00008,00009,0000A,0000B,0000C,0000D,0000E,0000F,00010....
 
解决如下:  www.zzzyk.com  
 
1、新建产生十进制的序列号SEQ_HEX
[sql] 
CREATE SEQUENCE SEQ_HEX  
MINVALUE 0  
MAXVALUE 10000000  
START WITH 0  
INCREMENT BY 1  
CACHE 20  
CYCLE  
ORDER;  
  www.zzzyk.com  
2、写一个函数,函数的作用是返回十六进制的序列号
 
[sql] 
CREATE OR REPLACE FUNCTION getHexSequence  
RETURN VARCHAR2  
AS  
    N_SHANG NUMBER(10);  
    N_YUSHU NUMBER(10);  
    HEXRES   VARCHAR2(10);  
BEGIN  
    N_SHANG :=seq_hex.NEXTVAL;  
    IF N_SHANG = 0 THEN  
          RETURN '00000';  
    END IF;  
    WHILE N_SHANG>0  LOOP  
        N_YUSHU:=N_SHANG MOD 16;  
        SELECT CONCAT(DECODE(N_YUSHU,'10','A','11','B','12','C','13','D','14','E','15','F',N_YUSHU),HEXRES) INTO HEXRES FROM DUAL;  
        N_SHANG := TRUNC(N_SHANG/16);  
    END LOOP;  
    RETURN LPAD(HEXRES,5,0);  
END;  
  www.zzzyk.com  
3、在程序中调用,产生十六进制的序列号
 
[sql] 
SQL> SELECT  getHexSequence FROM dual;  
  
GETHEXSEQUENCE  
----------------------------------------  
000AD  
 
上述解决方法不一定是最优的,希望抛砖引玉,看有没有更好的解决方案。
 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,