产生十六进制的流水号
产生十六进制的流水号
需求如下:
求一个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
上述解决方法不一定是最优的,希望抛砖引玉,看有没有更好的解决方案。