当前位置: 代码迷 >> Oracle开发 >> 关于生成自增序列号的有关问题
  详细解决方案

关于生成自增序列号的有关问题

热度:53   发布时间:2016-04-24 06:34:23.0
关于生成自增序列号的问题
要生成自增序列号,但是如果生成的序列号不能包含数字‘4’,例:‘4’,‘41’,‘142’ 这些都不可以,这个要怎么设计
------解决思路----------------------
可以写一个函数实现,参数为序列的名称
FUNCTION GetSeqValue(P_SeqName in varchar2) RETURN number IS
V_RESULT NUMBER;
BEGIN
LOOP
EXECUTE IMMEDIATE 'SELECT '
------解决思路----------------------
TRIM(P_SeqName)
------解决思路----------------------
'.NEXTVAL FROM DUAL' INTO V_RESULT;
EXIT WHEN INSTR(TO_CHAR(V_RESULT) ,'4')<=0;
END IF;
  RETURN V_RESULT;
END;

------解决思路----------------------
换了个方法,这个应该不存在效率问题了
FUNCTION GetSeqValue(P_SeqName in varchar2) RETURN number IS 
V_TEMP NUMBER; 
  V_RESULT varchar2(400);
BEGIN 
EXECUTE IMMEDIATE 'SELECT '
------解决思路----------------------
TRIM(P_SeqName)
------解决思路----------------------
'.NEXTVAL FROM DUAL' INTO V_TEMP; 
LOOP 
EXIT WHEN V_TEMP=0; 
  SELECT (CASE WHEN MOD(V_TEMP,9)<4 THEN MOD(V_TEMP,9) ELSE MOD(V_TEMP,9)+1 END)
------解决思路----------------------
V_RESULT INTO V_RESULT FROM DUAL; 
V_TEMP:=TRUNC(V_TEMP/9); 
END LOOP; 
  RETURN to_number(V_RESULT); 
END;
  相关解决方案