ストアド プロシージャの呼び出しで返される行数を返す関数を作成しようとしています。コードの繰り返しを最小限に抑えようとしています(コードのメンテナンス/デバッグを減らすために-プロシージャの選択が長くなります)。
ストアド プロシージャは、特定の基準に一致する行を読み取り専用で選択するだけです (あいまいですが、詳細は質問に重要ではありません)。
プロシージャを関数にコピーして select を count() に変更することもできますが、複数の結合で時間がかかるため、プロシージャを呼び出して行数を返すことができる関数を作成したいと考えていました。目標は最適化された実行ではなく、効率的なコードのメンテナンス、ボイラー プレートの削減です。
私はこれをテストとして試しました:
DELIMITER //
CREATE PROCEDURE IF NOT EXISTS proc_select1()
BEGIN
SELECT 1;
END //
CREATE FUNCTION IF NOT EXISTS select1_count() RETURNS INT UNSIGNED
BEGIN
CALL proc_select1();
RETURN FOUND_ROWS();
END //
DELIMITER ;
しかし、私SELECT select1_count();
が戻ってくることを望んでいるときに1
、「関数から結果セットを返すことができません」というエラーが表示されます。
変数に代入FOUND_ROWS
し、結果セットをクリアしてから変数値を返そうとしましたが、機能しません。
回避策を知っている人はいますか、それとも手順をコピーして貼り付けてSELECT COUNT
and 関数に変換する必要がありますか?
私はMySQL 5.5.16(必要に応じてアップグレードできます)、Windows 7(誰もアップグレードしたくないようです:)、HeidiSQLv7.0.0.4053(関連する場合)を使用しています
いつものように、どんな助けも大歓迎です。