web-dev-qa-db-ja.com

別のストアドプロシージャのストアドプロシージャから結果セットにアクセスするにはどうすればよいですか?

重要なSELECTステートメントがあり、2回書きたくありません(ソフトウェア開発の標準的な考慮事項)。 2つのストアドプロシージャで結果を使用したいと思います。私はこのようなものを想像しています:

CREATE PROCEDURE consumerProcedureA()
BEGIN
    CALL supplierProcedure();
    -- ** insert magic here **
END;

CREATE PROCEDURE consumerProcedureB()
BEGIN
    CALL supplierProcedure();
    -- ** insert magic here **
END;

CREATE PROCEDURE supplierProcedure()
BEGIN
    SELECT field1, field2, field3, MESSYEXPR AS field4
    FROM (complicated sub-SQL query) -- blah blah blah
    ;
END;

確かに、一般的なクエリをキャプチャするビューを作成できますが、呼び出し元のストアドプロシージャにアクセスさせ、呼び出されたストアドプロシージャから返された結果セットを処理する方法はありますか?

6
rich p

私はこれを自分で(私を満足させる方法で)行う方法を探していますが、完全に有効な方法はこのスタックオーバーフローのQ&Aで説明されています。

MySQLのストアドプロシージャでのストアドプロシージャの呼び出し

AhamedMustafaM による承認済みの回答は、次のコードでOUTパラメータを使用する手法を示しています。

 CREATE PROCEDURE innerproc(OUT param1 INT)
 BEGIN 
 insert into sometable; 
 SELECT LAST_INSERT_ID()into param1; 
 END 
 ----------------------------------- 
 CREATE PROCEDURE outerproc()
 BEGIN 
 CALL innerproc(@a); 
 // @aはinnerproc 
 SELECT @a INTO variableinouterproc FROM dual; 
 END 

私があなたが達成しようとしていることに対する答えが常にあるとは限りませんが、それは確かにオプションです。プロシージャが呼び出した結果のdirect結果を取得できませんでしたが、これは、おそらく複数のOUTを使用して、個々の値を取得するのに役立ちます必要なものを取得するためのパラメータ。

2
Snappawapa