要生成自增序列号,但是如果生成的序列号不能包含数字‘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;