在MySQL存储函数中使用函数时间[重复]

sczxawaw  于 2022-12-28  发布在  Mysql
关注(0)|答案(1)|浏览(110)
    • 此问题在此处已有答案**:

MySQL Multiple calls to timestamp () in procedure yields the same result(1个答案)
16小时前关门了。
我正在尝试创建一个存储在MySQL中的函数的执行日志。
就像这样:
日志表:

CREATE TABLE log_execution (
   id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   task VARCHAR(255) NOT NULL,
   start_time TIMESTAMP(6) NOT NULL,
   end_time TIMESTAMP(6));

功能:

CREATE DEFINER=`root`@`localhost` FUNCTION `log_execution`(p_task VARCHAR(255))
RETURNS INT(11)
BEGIN
   DECLARE v_start_time TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6);
   INSERT INTO log_execution(task, start_time) VALUES(p_task, v_start_time);

   SET @SLP = (SELECT SLEEP(5));

   UPDATE log_execution SET end_time = CURRENT_TIMESTAMP(6) WHERE start_time = v_start_time;
   RETURN ROW_COUNT();
END;

但是当我运行它的时候,开始时间和结束时间总是一样的,即使运行需要几秒钟。
有人知道这是不是一个bug以及如何解决它吗?
我用的是MySQL 5.7.40.
在记录日志时,正确记录执行的开始和结束。

z9smfwbn

z9smfwbn1#

CURRENT_TIMESTAMP()NOW()函数的同义词。
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_now says:
NOW()返回常量时间,指示语句开始执行的时间。(在存储函数或触发器中,NOW()返回函数或触发语句开始执行的时间。)这与SYSDATE()的行为不同,SYSDATE()返回执行的确切时间。

相关问题