nextval.sql 778 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. DELIMITER $$
  2. DROP FUNCTION IF EXISTS nextval$$
  3. CREATE FUNCTION nextval(v_seq_name VARCHAR (50)) RETURNS VARCHAR(50) CHARSET utf8
  4. BEGIN
  5. DECLARE V_CURRENT VARCHAR (20) ;
  6. DECLARE V_MAX VARCHAR (20) ;
  7. DECLARE V_MIN VARCHAR (20) ;
  8. SET V_CURRENT = '' ;
  9. SET V_MAX = '' ;
  10. SET V_MIN = '' ;
  11. SELECT
  12. CURRENT_VAL,
  13. MAX_VAL,
  14. MIN_VAL INTO V_CURRENT,
  15. V_MAX,
  16. V_MIN
  17. FROM
  18. SEQUENCE
  19. WHERE SEQ_NAME = v_seq_name ;
  20. IF V_CURRENT = V_MAX
  21. OR V_CURRENT = ''
  22. THEN
  23. UPDATE
  24. sequence
  25. SET
  26. CURRENT_VAL = V_MIN
  27. WHERE SEQ_NAME = v_seq_name ;
  28. ELSE
  29. UPDATE
  30. sequence
  31. SET
  32. CURRENT_VAL = (CURRENT_VAL + 0) + (INCREMENT_VAL + 0)
  33. WHERE SEQ_NAME = v_seq_name ;
  34. END IF ;
  35. RETURN currval (v_seq_name) ;
  36. END$$
  37. DELIMITER ;