1

我有函数 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 数据库的新手。谢谢

4

0 回答 0