【问题标题】:MySQL procedure temporary table SelectMySQL过程临时表选择
【发布时间】:2013-07-15 17:53:40
【问题描述】:

我正在尝试在 mysql 过程中创建一个临时表并从中选择结果。

这是一段 SQL

DELIMITER $$

CREATE PROCEDURE `mydb`.`simulate_results` (currdate DATETIME, enddate DATETIME, idcam INT)
BEGIN

DECLARE MYVAR1,
        MYVAR2,
        MYVAR3,
        IDX INT;

CREATE TEMPORARY TABLE IF NOT EXISTS tmp (
    `Id` INT NOT NULL AUTO_INCREMENT,
    `Field1` INT NOT NULL,
    `Field2` INT NOT NULL,
    `Field3` INT NOT NULL, PRIMARY KEY (`Id`)) ENGINE=MEMORY; 

INSERT INTO tmp (`Field1`,`Field2`,`Field3`) VALUES (0,0,0);
INSERT INTO tmp (`Field1`,`Field2`,`Field3`) VALUES (1,0,0);



SELECT Field1,Field2,Field3,Id INTO MYVAR1,MYVAR2,MYVAR3,IDXFROM tmp ORDER BY RAND() LIMIT 1;


        SELECT MYVAR1; (...)

从 SELECT INTO 语句中填充的唯一变量是 IDX(主键)。其他的总是 NULL。

这段代码有问题吗?

【问题讨论】:

    标签: mysql stored-procedures temp-tables


    【解决方案1】:

    您是否查看过您的临时表以了解其中徘徊的数据类型?过程完成后临时表仍然存在,如果您从同一会话再次运行该过程,您将向现有临时表写入新行。

    我会在CREATE TEMPORARY TABLE ... 之前添加DROP TEMPORARY TABLE IF EXISTS tmp,以确保您没有旧数据。

    【讨论】:

      猜你喜欢
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2012-11-19
      相关资源
      最近更新 更多