将存储过程结果存入MySQL存储过程中的临时表

4
我有一个存储过程/例程“ABC”,它返回一个带有几行列的表格。
在另一个SP/Routine“XYZ”中,我想将“ABC”返回的结果集与数据库中的表进行比较。
但是,我遇到了一个障碍,我无法找到一种从“XYZ”内部调用“ABC”的方法。是否有任何方法可以通过从“XYZ”调用“ABC”来填充临时表?
我非常新于MySQL,并且相当确定这在SQL Server中是可能的,现在我不知道该如何进一步进行。请帮助我确定我在理解过程中犯了什么错误。
1个回答

6

您可以在过程中创建和填充临时表。然后,您可以通过其名称从另一个过程引用该表,但必须使用创建临时表的会话。临时表是会话作用域对象。


示例:

DELIMITER $$

CREATE PROCEDURE ABC()
BEGIN
  CREATE TEMPORARY TABLE tmpEnt SELECT 1;
END$$

CREATE PROCEDURE XYZ()
BEGIN
  INSERT INTO tmpEnt VALUES (100);
END$$

DELIMITER ;

CALL ABC; -- it will create temp. table
CALL XYZ; -- it will insert one more record into temp. table

SELECT * FROM tmpEnt;
+-----+
| 1   |
+-----+
|   1 |
| 100 |
+-----+

我使用了存储过程而不是函数。

这就是我不明白的地方,如何将StoredProcedure的结果放入一个临时表中。我尝试了这个:create temporary table tmpEnt engine=memory select * from (call ABC),但是它没有起作用。 - Niladri
不,你不能这样做。它不是一个表函数,只是一个简单的函数。在MySQL中,函数只能返回标量值-数字、字符串,而不是表格。我会添加一个小例子。 - Devart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接