[英]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.