簡體   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