2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLのストアドプロシージャ内でROW_COUNT()関数を使う際、空行(改行)に気を付ける

Last updated at Posted at 2016-01-13

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

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?