function.sql 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. CREATE TABLE `plat_sequence` (
  2. `name` varchar(32) NOT NULL COMMENT '序列编码',
  3. `current_value` int(11) DEFAULT 1000 COMMENT '当前值/初始值',
  4. `increment` int(11) DEFAULT NULL COMMENT '步增值',
  5. `remark` text DEFAULT NULL COMMENT '备注',
  6. `created_by` int(11) NOT NULL COMMENT '创建者',
  7. `created_name` varchar(90) NOT NULL COMMENT '创建人',
  8. `created_time` datetime NOT NULL COMMENT '创建时间',
  9. `updated_by` int(11) DEFAULT NULL COMMENT '更新者',
  10. `updated_name` varchar(90) DEFAULT NULL COMMENT '更新人',
  11. `updated_time` datetime DEFAULT NULL COMMENT '更新时间',
  12. `deleted_time` datetime DEFAULT NULL COMMENT '删除时间',
  13. PRIMARY KEY (`name`) USING BTREE
  14. ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '序列信息表' ;
  15. DROP FUNCTION IF EXISTS nextval;
  16. DELIMITER $
  17. CREATE FUNCTION nextval (seq_name VARCHAR(50)) RETURNS INTEGER LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN
  18. UPDATE plat_sequence
  19. SET current_value = current_value + increment
  20. WHERE name = seq_name;
  21. RETURN currval(seq_name);
  22. END $
  23. DELIMITER ;
  24. alter table plat_sequence add `year` int(11) DEFAULT NULL COMMENT '年份' after increment;
  25. update plat_sequence set year=2023,current_value=49 where name = 'contract_code'
  26. DROP FUNCTION IF EXISTS next_year_reset_val;
  27. DELIMITER $
  28. CREATE FUNCTION next_year_reset_val (seq_name VARCHAR(50)) RETURNS INTEGER LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN
  29. UPDATE plat_sequence SET current_value=0, `year`=year(now()) WHERE `year` = year(now())-1;
  30. UPDATE plat_sequence SET current_value=current_value+increment WHERE name = seq_name;
  31. RETURN currval(seq_name);
  32. END $
  33. DELIMITER ;
  34. DROP FUNCTION IF EXISTS currval;
  35. DELIMITER $
  36. CREATE FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)
  37. DETERMINISTIC
  38. BEGIN
  39. DECLARE VALUE INTEGER;
  40. SET VALUE = 0;
  41. SELECT current_value INTO VALUE
  42. FROM plat_sequence
  43. WHERE NAME = seq_name;
  44. RETURN VALUE;
  45. END $
  46. DELIMITER ;
  47. -- INSERT INTO plat_sequence VALUES ('customer_code', 1000, 1, '', 1000, '系统管理员', '2023-02-09 10:27:42', null, null, null, null);
  48. -- INSERT INTO plat_sequence VALUES ('contract_code', 1000, 1, '', 1000, '系统管理员', '2023-02-09 10:27:42', null, null, null, null);
  49. -- select `nextval`('customer_code');