重要な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;
確かに、一般的なクエリをキャプチャするビューを作成できますが、呼び出し元のストアドプロシージャにアクセスさせ、呼び出されたストアドプロシージャから返された結果セットを処理する方法はありますか?
私はこれを自分で(私を満足させる方法で)行う方法を探していますが、完全に有効な方法はこのスタックオーバーフローの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
を使用して、個々の値を取得するのに役立ちます必要なものを取得するためのパラメータ。