4

数行の列を持つテーブルを返すストアドプロシージャ/ルーチン「ABC」があります。

別のSP/ルーチン「XYZ」では、「ABC」によって返された結果セットをデータベース内のテーブルと比較したいと思います。

しかし、「XYZ」内からSPを「ABC」と呼ぶ方法を見つけることができないという障害にぶつかりました。「XYZ」から「ABC」を呼び出して一時テーブルにデータを入力する方法はありますか。

私はMySQLを初めて使用しますが、これはSQL Serverで可能であると確信しており、さらに先に進む方法がわかりません。プロセスを理解する上でどこを間違えているのかを特定するのを手伝ってください。

4

1 に答える 1

4

プロシージャで一時テーブルを作成してデータを入力できます。次に、別のプロシージャからこのテーブルを名前で参照できますが、一時テーブルが作成されたセッションを使用する必要があります。一時テーブルは、セッションスコープのオブジェクトです。


例:

DELIMITER $$

CREATE PROCEDURE ABC()
BEGIN
  CREATE TEMPORARY TABLE tmpEnt SELECT 1;
END$$

CREATE PROCEDURE XYZ()
BEGIN
  INSERT INTO tmpEnt VALUES (100);
END$$

DELIMITER ;

CALL ABC; -- it will create temp. table
CALL XYZ; -- it will insert one more record into temp. table

SELECT * FROM tmpEnt;
+-----+
| 1   |
+-----+
|   1 |
| 100 |
+-----+

関数の代わりにストアドプロシージャを使用しました。

于 2012-05-23T13:42:29.027 に答える