我有函数 nextval 可以从实时 oracle 数据库到 mysql 获取正确的序列最后一个数字,函数就像这样。
mysql> DELIMITER //
mysql>
mysql> CREATE FUNCTION `nextval` (`seq_name` varchar(100))
-> RETURNS bigint(20) NOT DETERMINISTIC
-> BEGIN
-> DECLARE cur_val bigint(20);
->
-> SELECT
-> sequence_cur_value INTO cur_val
-> FROM
-> rsd.sequence_data
-> WHERE
-> sequence_name = seq_name
-> ;
->
-> IF cur_val IS NOT NULL THEN
-> UPDATE
-> rsd.sequence_data
-> SET
-> sequence_cur_value = IF (
-> (sequence_cur_value + sequence_increment) > sequence_max_value,
-> IF (
-> sequence_cycle = TRUE,
-> sequence_min_value,
-> NULL
-> ),
-> sequence_cur_value + sequence_increment
-> )
-> WHERE
-> sequence_name = seq_name
-> ;
-> END IF;
->
-> RETURN cur_val;
-> END
-> //
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
相同的功能在我的带有 mysql 版本 5.7.16 的 Windows 机器上编译得很好,但在我的带有相同 mysql 版本 5.7.16 的 Linux 机器上同样失败。
mysql> select test.nextval('SEQ_MODEL');
+--------------------------------+
| test.nextval('SEQ_MODEL') |
+--------------------------------+
| 11608 |
+--------------------------------+
1 row in set (0.01 sec)
在这种情况下,我犯了什么男生错误?
PS:我是 MySql 数据库的新手。谢谢