CALLは、OUTまたは INOUTパラメータであると宣言されているパラメータを使って、
値を発信側に返すことができます。またこれはROW_COUNT() ファンクションをコールする事で
クライアントプログラムがSQLレベルで取得する事ができ、またmysql_affected_rows() C API
機能をコールする事によって Cから取得する事ができる、影響を受けた行を「返します」。

MySQL 5.1.13では現在、アーギュメントを取り込んでいないストアドプロシージャに、
かっことをつけることなく取り出すことができるようになっています。
即ち、CALL p()とCALL pは等価です。

OUTまたはINOUTパラメータを使って、値をプロシージャから
戻すには、パラメータを、ユーザ変数を使って渡し、プロシージャが戻した後、変数の値をチェックします。
ユーザが保存された他のプロシージャの中からプロシージャまたはファンクションを呼び出す場合、
ユーザはルーチンパラメータまたはローカルルーチン変数を、INパラメータまたはINOUTパラメータ
として渡すことができます。INOUTパラメータの場合、それをプロシージャに渡す前に値を初期化
してください。以下のプロシージャには、そのプロシージャがサーバの現バージョンにセットする
OUT パラメータおよびそのプロシージャがその現在値から1だけ増やすINOUT値が含まれています。


delimiter //
CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param INT)
BEGIN
# Set value of OUT parameter
SELECT VERSION() INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
//
delimiter ;

プロシージャを呼び出す前に、INOUTパラメータとして渡すべき変数を初期化。
プロシージャを呼び出した後には、2つの変数はセットまたは改良されています。

inout


mysql> CALL p(@version, @increment);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @version, @increment;
+------------+------------+
| @version | @increment |
+------------+------------+
| 5.1.40-log | 11 |
+------------+------------+
1 row in set (0.00 sec)

version

参考サイト
17.2.4. CALLステートメント構文


REPEAT ステートメント

REPEATステートメント中のステートメントリストは、search_conditionが真になるまで繰り返されます。
このようにして、REPEAT は常に、少なくとも1回入力ループを書き込みます
statement_list は複数のステートメントから成り立っています。

REPEATステートメントにはラベルを貼ることができます。begin_label がなければ、
end_label を与える事はできません。両方が存在する場合、これらは同じでなければなりません。


[begin_label:] REPEAT
statement_list
UNTIL search_condition
END REPEAT [end_label]


mysql> delimiter //
mysql> CREATE PROCEDURE REPEATE_TEST(p1 INT)
-> BEGIN
-> SET @x = 0;
-> REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> CALL REPEATE_TEST(1000);
Query OK, 0 rows affected (0.06 sec)

mysql> SELECT @x;
+------+
| @x |
+------+
| 1001 |
+------+
1 row in set (0.00 sec)

mysql> CALL REPEATE_TEST(3000);
Query OK, 0 rows affected (0.15 sec)

mysql> SELECT @x;
+------+
| @x |
+------+
| 3001 |
+------+
1 row in set (0.00 sec)

mysql> CALL REPEATE_TEST(1);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @x;
+------+
| @x |
+------+
| 2 |
+------+
1 row in set (0.01 sec)

mysql>

repeate


select ROUTINE_NAME,ROUTINE_SCHEMA,SECURITY_TYPE
from information_schema.ROUTINES;

reprate_1

参考サイト
17.2.10.6. REPEAT ステートメント