1

OUT または INOUT パラメータを使用して MySQL でストアド プロシージャを作成すると、機能しません。ストアドプロシージャを空のままにしても。DDL は次のとおりです。

CREATE DEFINER=`root`@`localhost` PROCEDURE `testing_inout`(`a` int,INOUT `b` int)
BEGIN

END

最初のパラメーターは通常の IN パラメーターです。2 つ目は INOUT パラメータです (OUT として設定しても同じ問題が続きます)

このストアド プロシージャを呼び出すと、次のようなエラーが表示されます。

ルーチン db_name.testing_inout の OUT または INOUT 引数 2 は、BEFORE トリガーの変数または NEW 疑似変数ではありません。

このエラーは、コードがストアド プロシージャ内に記述されていても持続します。mysql バージョン 5.1.41 を実行しています。

このエラーのために再帰ストアド プロシージャの結果を出力できないため、これは私にとって大きな問題です。

4

1 に答える 1

4

わたしにはできる

mysql> CREATE DEFINER=`root`@`localhost` PROCEDURE `testing_inout`(`a` int,INOUT `b` int)
    -> BEGIN
    -> 
    -> END
    -> ;
Query OK, 0 rows affected (0.00 sec)

2 番目のパラメーターは inout であるため、変数である必要があります。

mysql> set @c:=1;
Query OK, 0 rows affected (0.00 sec)

mysql> call testing_inout(1,@c);
Query OK, 0 rows affected (0.00 sec)

これを試すと、1 が返されます。

delimiter |
CREATE DEFINER=`root`@`localhost` PROCEDURE `testing_inout`(`a` int,INOUT `b` int)
BEGIN
select b;
END
|
delimiter ;

mysql> call testing_inout(1,@c);
+------+
| b    |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
于 2012-06-29T19:51:00.637 に答える