【问题标题】:Use current_timestamp +0 as variable in store procedure在存储过程中使用 current_timestamp +0 作为变量
【发布时间】:2017-10-30 20:29:24
【问题描述】:

在 MySQL 过程中,我想将 current_timestamp+0 设置为一个变量并在查询中使用该变量。

编辑: 我需要 @P_version 在整个过程中保持相同的值。我想在开始时获取当前时间戳并在所有查询中使用此值。

我试过了:

BEGIN
    DECLARE P_version float;
    SET P_version = current_timestamp +0;

    insert INTO reports_4.Items(id, version, itype)
    Select I.id, P_version, I.itype from Items where I.live = 1;
    .....
END;

还有:

    BEGIN
      BEGIN
        SET @P_version = 'select current_timestamp +0 from dual';
            PREPARE query from @P_version;
            EXECUTE query;
            DEALLOCATE prepare query;
        END;    
      insert INTO reports_4.Items(id, version, itype)
      Select I.id, P_version, I.itype from Items where I.live = 1;
      .....
END;

如果我使用以下代码,当我第二次调用我的过程时,@P_version 的值与我第一次运行该过程时的值相同。

BEGIN
  select @P_version = current_timestamp +0 from dual;

  insert INTO reports_4.Items(id, version, itype)
  Select I.id, @P_version, I.itype from Items where I.live = 1;
  .....
END;

你有什么想法吗?

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    set @p = now();?对于这种事情,mysql 不需要从 dual 中进行选择。

    【讨论】:

    • 如果我只是把 SET @P_version = now();它说:ERROR 1054 (42S22): Unknown column 'P_version' in 'field list'
    • 以后必须是select i.id, @P_version, ...。 Vars HAVE@ 开头,否则 mysql 将无法区分什么是真正的 var,以及恰好具有相同名称的字段/表名。
    • 谢谢它有效,我愿意:设置@P_version = current_timestamp +0;,然后在查询中使用@P_version
    • 实际上它不能按我的意愿工作,因为@P_version = current_timestamp +0 正在加班。我有很多查询我使用@P_version 并且它的值应该保持不变,直到过程的和。我编辑了问题以添加此要求。
    • 每次调用过程时,var 只会设置一次。如果您需要多次调用相同,则必须将其设置在程序之外的某个位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多