Workbench上でストアドプロシージャを作成の際に、ハマったので備忘録として残します。
当然のことなのかも知れませんが・・・ROW_COUNT()関数を実行している上の行が空行の場合、
正常にカウントを取得できませんでした。。
そのため、ストアドプロシージャ内でROW_COUNT()関数を利用する際は、以下のように空の行を含めずにする必要があります。(知りませんでしたので残しておきます)
例)insert結果を返すプロシージャ(insert成功なら1が返る)
※Delimiter変更は割愛
成功例
CREATE DEFINER=`test_user`@`%` PROCEDURE `sp_test`(
IN str_id char(3),
IN str_name varchar(45),
OUT rowcount int
)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET rowcount = -1;
INSERT INTO `test_table`
(`TestID`,`TestName`,`RegDate`)
VALUES
(str_id,str_name,NOW());
SELECT ROW_COUNT() INTO rowcount;
END
上記、
SELECT ROW_COUNT() INTO rowcount;
の上に、「改行された空の行」が存在すると、rowcount=0で正常に取得ができませんでした。
※以下のような状態はNG(insert成功でも0が返ってしまう)
失敗例
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET rowcount = -1;
INSERT INTO `test_table`
(`TestID`,`TestName`,`RegDate`)
VALUES
(str_id,str_name,NOW());
SELECT ROW_COUNT() INTO rowcount;
空の行分がROW_COUNT()の最後に実行した内容として取得されてしまったからでしょうか・・・?
空の行を無くすと正常にrow_count=1が返ります。
あまり詳しく調べていないためなんとも言えませんが、ストアドプロシージャを作成の際は、
不要な改行に気を付けた方がよさそうです。
※環境 MySQL5.6 Workbench6.3