繁体   English   中英

在另一个存储过程中获取存储过程结果集

[英]Get stored procedure resultset inside another stored procedure

假设我有多个在 IN 子句中使用相同子查询的存储过程。 子查询 select 是一个 ID 列表。 我的反应是提前 go 并创建一个包含此子查询的新存储过程以在一个地方定义它,并在其他过程中使用它。 现在我意识到在调用存储过程时我无法从子查询中获取结果集......我搜索并发现除了定义一个临时表之外没有其他选择,我发现获得一对 Id 有点过头了。 有什么我遗漏的,或者我根本无法在 MYSQL 中做到这一点?

为了说明我的问题:

CREATE PROCEDURE subquery()
BEGIN   
    SELECT id from example; # returns a list of IDs
END;

CREATE PROCEDURE procedure1()
BEGIN   
    SELECT * from example2 WHERE id IN (CALL subquery()); # No go, syntax error
END;

CREATE PROCEDURE procedure2()
BEGIN
    SET @resultSet = CALL subquery();
    SELECT * from example2 WHERE id IN (@resultSet); # No go, syntax error
END;

当然,真正的子查询是 SQL 的一大块,我更喜欢将其维护在一个地方。

据我了解,我不能使用函数,因为它们只返回标量值,我不能使用 OUT 参数,因为它们不允许结果集。

除了乘以子查询或使用此处定义的临时表之外,我还有什么选择?

不幸的是,您不能在 MySQL 的另一个存储过程中使用存储过程 output。 但是,如果您的子查询不需要参数,最好的选择(在我看来)是 VIEW:

CREATE VIEW myView AS select id from example;

然后您可以将您的视图引用为表格(也在其他存储的过程中):

SELECT * from example2 WHERE id IN (select id from myView);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM