【问题标题】:Is there any way to store a SELECT result and output the resultset at the same time?有什么方法可以存储 SELECT 结果并同时输出结果集?
【发布时间】:2016-01-12 05:36:14
【问题描述】:

在下一个示例过程中,是否可以将查询表中的行作为过程结果集输出,同时将单个字段或某些字段存储在变量中(类似于我使用 SELECT INTO 时)?我能想象的唯一方法是重复查询。

CREATE PROCEDURE `Panel_TerminalesForm`(IN idTerminal INT)
  BEGIN
    declare somefield INT:
    -- this select statement returns the found row as a resultset
    SELECT terminales.*
    FROM terminales
    WHERE id_terminal = idTerminal;
    -- but I also want to have here a table field inside the variable somefield
    -- do some manipulation with somefield...
END;

【问题讨论】:

  • 我不确定我是否理解正确,但似乎您需要的是临时表。
  • 我正在寻找某种方式来告诉 MySQL“请执行 SELECT INTO 我的 vars 但也输出结果集”,但恐怕我不能,所以很可能是一个有效的解决方案。如果您将其作为分析器发布并且代码正在运行,我不会怀疑将其标记为正确
  • 我发布了一个答案,结果与您的查询相同,但现在您可以在临时表中做任何您想做的事情,而不会影响原始/物理表。

标签: mysql sql select stored-procedures resultset


【解决方案1】:

如果我理解正确,你需要创建一个临时表,然后你可以按照你想要的方式操作临时表。

MySQL:

    CREATE PROCEDURE `Panel_TerminalesForm`(IN idTerminal INT)
        BEGIN
          declare somefield INT

          CREATE TEMPORARY TABLE SampleTempTable
          SELECT * INTO SampleTempTable FROM terminales WHERE id_terminal = idTerminal;

          -- output the resultset
          SELECT * FROM SampleTempTable   

          -- read the variables you want
          SELECT field INTO somefield FROM SampleTempTable   

          -- Drop the temp table
          DROP TEMPORARY TABLE SampleTempTable
    END;

http://www.mysqltutorial.org/mysql-temporary-table/

SQL 服务器:

    CREATE PROCEDURE `Panel_TerminalesForm`(IN idTerminal INT)
        BEGIN
          declare somefield INT

          SELECT terminales.* 
          INTO #tempSample FROM terminales
          WHERE id_terminal = idTerminal;

          SELECT * FROM #tempSample

          -- Drop the temp table
          DROP TABLE #tempSample
    END;

注意:使用后删除临时表以避免错误。

【讨论】:

  • 对于临时表来说,尖锐的语法是有效的 MySQL 语法吗?我觉得不是
  • 这看起来更像 SQL Server 语法。
  • 我修改了临时表的MySQL语法答案。
  • 酷。我修改了 MySQL 部分,以便真正插入到 temptable 中——你忘了它——并且还按照我的要求读取了一个变量。因为我不想把它搞砸,所以我保留了 SQL Server 部分。不错的解决方案!
猜你喜欢
  • 2019-11-08
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 2014-09-17
相关资源
最近更新 更多