1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- DELIMITER $$
- DROP FUNCTION IF EXISTS nextval$$
- CREATE FUNCTION nextval(v_seq_name VARCHAR (50)) RETURNS VARCHAR(50) CHARSET utf8
- BEGIN
-
- DECLARE V_CURRENT VARCHAR (20) ;
- DECLARE V_MAX VARCHAR (20) ;
- DECLARE V_MIN VARCHAR (20) ;
- SET V_CURRENT = '' ;
- SET V_MAX = '' ;
- SET V_MIN = '' ;
- SELECT
- CURRENT_VAL,
- MAX_VAL,
- MIN_VAL INTO V_CURRENT,
- V_MAX,
- V_MIN
- FROM
- SEQUENCE
- WHERE SEQ_NAME = v_seq_name ;
-
- IF V_CURRENT = V_MAX
- OR V_CURRENT = ''
- THEN
- UPDATE
- sequence
- SET
- CURRENT_VAL = V_MIN
- WHERE SEQ_NAME = v_seq_name ;
-
- ELSE
- UPDATE
- sequence
- SET
- CURRENT_VAL = (CURRENT_VAL + 0) + (INCREMENT_VAL + 0)
- WHERE SEQ_NAME = v_seq_name ;
- END IF ;
- RETURN currval (v_seq_name) ;
- END$$
- DELIMITER ;
|