type strtest is varray(34) of varchar2(1);
v_str strtest := strtest('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z');
SELECT count(1)
into v_count
FROM TB_G_SEQNO
WHERE prdfix = p_prdfix
and postfix = p_postfix;
--如果沒有改筆記錄
if v_count = 0 then
INSERT INTO TB_G_SEQNO
(prdfix, postfix, max_used, edit_date)
VALUES
(p_prdfix, p_postfix, v_result, sysdate);
COMMIT;
end if;
--查詢改筆記中存在的流水號
SELECT max_used
INTO v_result
FROM TB_G_SEQNO
WHERE prdfix = p_prdfix
and postfix = p_postfix for update;
--如果為空
IF v_result is null THEN
v_result := 1;
ELSE
v_result := v_result + 1;
END IF;
--將最大流水號轉換為34進制額字符
select mod(trunc(trunc(trunc(v_result / 34) / 34) / 34), 34) x1,
mod(trunc(trunc(v_result / 34) / 34), 34) x2,
mod(trunc(v_result / 34), 34) x3,
MOD(v_result, 34) x4
into v_x1, v_x2, v_x3, v_x4
FROM DUAL;
--拼成結果
v_resultstr := v_str(v_x1 + 1) || v_str(v_x2 + 1) || v_str(v_x3 + 1) ||
v_str(v_x4 + 1);
--修改最大流水碼
UPDATE TB_G_SEQNO t
SET t.max_used = v_result,
t.edit_date = sysdate,
t.MAX_USEDSTR = v_resultstr
WHERE t.prdfix = p_prdfix
and postfix = p_postfix;
COMMIT;