|
如果一定不能断号的话,用这种办法:
CREATE TABLE seq (next_id NUMBER(11));
INSERT INTO SEQ VALUES (TO_CHAR(SYSDATE,'YYYYMMDD')||'001');
CREATE OR REPLACE FUNCTION f_next_id RETURN NUMBER
IS
lv_ret NUMBER(11);
BEGIN
UPDATE seq
SET next_id = (CASE WHEN SUBSTR(next_id,1,8)<>TO_CHAR(SYSDATE,'YYYYMMDD') THEN TO_CHAR(SYSDATE,'YYYYMMDD')||'001'
ELSE next_id+1
END)
RETURNING next_id
INTO lv_ret;
RETURN lv_ret;
END f_next_id;
/
在需要取号的地方,调一下f_next_id取号。
在大系统中是不推荐这么用的,因为所有并行的事务都将串行化。考虑到你的业务规模不大,每日只有三位数,用这种解决办法也是可以的。 |
|