003-FUNCTION.sql 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. delimiter //
  2. drop function if exists getLastTerm//
  3. create function getLastTerm()
  4. RETURNS varchar(20)
  5. DETERMINISTIC
  6. BEGIN
  7. DECLARE str varchar(20);
  8. select nounvalue into str from sys_noun where NOUNITEM = 'TERM';
  9. RETURN str;
  10. END //
  11. DROP FUNCTION IF EXISTS `nextval`;
  12. delimiter //
  13. CREATE FUNCTION nextval(sequence_name varchar(64)) RETURNS int(11)
  14. BEGIN
  15. declare current integer;
  16. set current = 0;
  17. select t.value into current from t_sequence t where t.sequence_name = sequence_name for update;
  18. update t_sequence t set t.value = t.value + 1 where t.sequence_name = sequence_name;
  19. set current = current + 1;
  20. return current;
  21. end//
  22. -- (匹配两个以逗号分隔的字符串是否存在相同的字符串)函数 用于发布信息查询
  23. DROP FUNCTION IF EXISTS `func_haveSameContent`;
  24. CREATE FUNCTION `func_haveSameContent` (setA varchar(255),setB varchar(255)) RETURNS int(1)
  25. BEGIN
  26. DECLARE idx INT DEFAULT 0 ;
  27. DECLARE len INT DEFAULT 0;
  28. DECLARE llen INT DEFAULT 0;
  29. DECLARE clen INT DEFAULT 0;
  30. DECLARE tmpStr varchar(255);
  31. DECLARE curt varchar(255);
  32. SET len = LENGTH(setB);
  33. WHILE idx < len DO
  34. SET idx = idx + 1;
  35. SET tmpStr = SUBSTRING_INDEX(setB,",",idx);
  36. SET clen = LENGTH(tmpStr);
  37. IF idx = 1 THEN SET curt = tmpStr;
  38. ELSE SET curt = SUBSTRING(setB,llen+2,clen-llen-1);
  39. END IF;
  40. IF FIND_IN_SET(curt,setA) > 0 THEN RETURN 1;
  41. END IF;
  42. IF clen <= llen THEN RETURN 0;
  43. END IF;
  44. SET llen = clen;
  45. END WHILE;
  46. RETURN 0;
  47. end//
  48. delimiter ;