报错:
错误分析:
DETERMINISTIC 不确定的
NO SQL 没有SQl语句
READS SQL DATA 只读取数据
MODIFIES SQL DATA 修改数据
CONTAINS SQL 包含SQL语句
FUNCTION 和 PROCEDURE 只支持 DETERMINISTIC、NO SQL 和 READS SQL DATA 三种。
如果mysql开启了bin-log, 则必须为 FUNCTION 或 PROCEDURE 指定一个参数。
解决:
方法1:创建函数时指定一种类型,如:READS SQL DATA
方法2:启用方法创建信任机制
set global log_bin_trust_function_creators = 1;
或
set global log_bin_trust_function_creators = TRUE;
自动编号的函数
CREATE TABLE `TB_SEQUENCE` (
`NAME` VARCHAR(100) NOT NULL COMMENT ‘NAME’,
`CURRENT_VALUE` BIGINT(20) NOT NULL DEFAULT ‘0’ COMMENT ‘最大值’,
`INCREMENT` INT(11) NOT NULL DEFAULT ‘1’ COMMENT ‘步长’,
`PREFIX` VARCHAR(100) DEFAULT NULL COMMENT ‘前缀’,
`REMARK` VARCHAR(2000) NOT NULL COMMENT ‘备注’,
PRIMARY KEY (`NAME`)
);DELIMITER $$
USE `ruvarehr`$$
DROP FUNCTION IF EXISTS `SEQUENCE_CURRVAL`$$
CREATE DEFINER=`ruvarehr`@`%` FUNCTION `SEQUENCE_CURRVAL`(N VARCHAR(100)) RETURNS BIGINT(20)
BEGIN
DECLARE CUR BIGINT;
SET CUR=(SELECT CURRENT_VALUE FROM TB_SEQUENCE WHERE NAME= N FOR UPDATE);
RETURN CUR;
END$$DELIMITER ;
DELIMITER $$
USE `ruvarehr`$$
DROP FUNCTION IF EXISTS `SEQUENCE_NEXTVAL`$$
CREATE DEFINER=`ruvarehr`@`%` FUNCTION `SEQUENCE_NEXTVAL`(N VARCHAR(100)) RETURNS BIGINT(20)
BEGIN
DECLARE CUR BIGINT;
UPDATE TB_SEQUENCE SET CURRENT_VALUE = CURRENT_VALUE + INCREMENT WHERE NAME=N ;
SET CUR=(SELECT CURRENT_VALUE FROM TB_SEQUENCE WHERE NAME= N FOR UPDATE);
RETURN CUR;
END$$DELIMITER ;
— 获取当前值
SELECT SEQUENCE_CURRVAL(‘promotion_code’);
— 获取下一个值
SELECT SEQUENCE_NEXTVAL(‘promotion_code’);

评论0