web-dev-qa-db-ja.com

MySQLはストアドプロシージャから結果セットをどのように返しますか?

私は、Webアプリケーションで使用するためのストアード・プロシージャーを理解しようとしています。 MySQLストアドプロシージャの最後のステートメントが何であれ、そのプロシージャの結果セットとして扱われるように思えます。しかし残念ながら、MySQLのドキュメントには、プロシージャが複数の結果セットを返す可能性があるとの記載があるようです。この動作はどのようにトリガーされますか? MySQLサーバーに、結果セットを1つだけ明示的に返すように指示するにはどうすればよいですか?

(たとえば、SELECTといくつかの挿入を実行するクエリがあります。挿入についてクライアントに伝えたくありませんが、クライアントにSELECTの結果セットを与えたいです...)

16
Billy ONeal

テーブルまたは変数に挿入しない各SELECTステートメントは、結果セットを生成します。

ストアドプロシージャが1つの結果セットのみを返すようにする場合は、SELECTステートメントが1つだけであることを確認してください。他のSELECTステートメントがある場合は、それらがテーブルまたは変数に結果を挿入することを確認してください。

[〜#〜]更新[〜#〜]
これはストアドプロシージャの例です。

このストアドプロシージャは、1つの結果セットを返します。

DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
    DECLARE local_variable_name INT;

    SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;

    SELECT * FROM table_1;
END;;
DELIMITER ;

このストアドプロシージャは、2つの結果セットを返します。

DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
    DECLARE local_variable_name INT;

    SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;

    SELECT * FROM table_1;

    SELECT * FROM table_2;
END;;
DELIMITER ;
17
dabest1