49 lines
1.3 KiB
Plaintext
49 lines
1.3 KiB
Plaintext
DELIMITER //
|
|
CREATE OR REPLACE FUNCTION sys_next_no(
|
|
p_billno_max VARCHAR(20)
|
|
)
|
|
RETURNS VARCHAR(20)
|
|
DETERMINISTIC
|
|
BEGIN
|
|
DECLARE v_billno VARCHAR(20);
|
|
DECLARE v_code1 VARCHAR(10);
|
|
DECLARE v_code2 VARCHAR(10);
|
|
DECLARE v_code3 INT;
|
|
|
|
SET v_billno = p_billno_max;
|
|
|
|
IF IFNULL(v_billno, '') = '' THEN
|
|
SET v_billno = CONCAT(DATE_FORMAT(CURDATE(), '%y%m%d'), '-001');
|
|
ELSE
|
|
-- Check last 3 digits
|
|
IF REGEXP_SUBSTR(v_billno, '[0-9]{3}$') IS NOT NULL THEN
|
|
SET v_code1 = RIGHT(v_billno, 3);
|
|
SET v_code3 = CAST(v_code1 AS UNSIGNED) + 1;
|
|
|
|
IF v_code3 < 10 THEN
|
|
SET v_code2 = CONCAT('00', v_code3);
|
|
ELSEIF v_code3 < 100 THEN
|
|
SET v_code2 = CONCAT('0', v_code3);
|
|
ELSE
|
|
SET v_code2 = CAST(v_code3 AS CHAR);
|
|
END IF;
|
|
|
|
SET v_billno = CONCAT(LEFT(v_billno, LENGTH(v_billno) - 3), v_code2);
|
|
-- Check last 2 digits
|
|
ELSEIF REGEXP_SUBSTR(v_billno, '[0-9]{2}$') IS NOT NULL THEN
|
|
SET v_code1 = RIGHT(v_billno, 2);
|
|
SET v_code3 = CAST(v_code1 AS UNSIGNED) + 1;
|
|
|
|
IF v_code3 < 10 THEN
|
|
SET v_code2 = CONCAT('0', v_code3);
|
|
ELSE
|
|
SET v_code2 = CAST(v_code3 AS CHAR);
|
|
END IF;
|
|
|
|
SET v_billno = CONCAT(LEFT(v_billno, LENGTH(v_billno) - 2), v_code2);
|
|
END IF;
|
|
END IF;
|
|
|
|
RETURN v_billno;
|
|
END //
|
|
DELIMITER ; |