2015-10-14 114 views
0

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

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; 
+0

我不知道我是否正确理解你,但似乎你需要的是临时表。 – Japongskie

+0

我正在寻找一些方法来告诉MySQL“请做一个SELECT INTO我的变量,但也oputput结果集”,但我恐怕我不能,所以这个可能性很可能是一个有效的解决方案。如果您将它作为anser发布并且代码正在工作,我不会怀疑将其标记为正确 –

+0

我发布了一个答案,结果与您的查询相同,但是现在您可以在临时表中执行任何操作目的而不影响orig /物理表。 – Japongskie

回答

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; 

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

+0

尖括号语法是否为临时表的有效MySQL语法?我认为这不是 –

+0

这看起来更像是SQL Server语法。 –

+0

我修改了临时表的MySQL语法的答案。 – Japongskie