プログラマメモ2 - programmer no memo2

mysqlでストアドプロシージャ その3 - ROW_COUNT() 2012/09/22

mysqlでストアドプロシージャ その3です。
 ROW_COUNT()を使うのが今回の趣旨です。
ROW_COUNTは

先行するステートメントによって更新、インサート、または削除された行の数を戻します。

ってことらしい
参考
[MySQL]複数行を追加するためのinsert文Add Star
ROW_COUNT()


DROP PROCEDURE IF EXISTS p002;
delimiter //
CREATE PROCEDURE p002()
BEGIN
    -- 取得件数格納用
    DECLARE c INT;
  
    -- 1行で複数行追加する
    INSERT INTO a VALUES(0, CURRENT_TIMESTAMP()),(0, CURRENT_TIMESTAMP()),(0, CURRENT_TIMESTAMP());
    -- 直前の更新件数を取得
    SELECT ROW_COUNT() INTO c;
    -- 値を表示する
    SELECT CONCAT('rowcount:', c);
END
//
CALL p002();-- ここで実行
DROP PROCEDURE IF EXISTS p002;

mysqlの文字列結合のやりかたがわからない...
oracleだと||だったと思うんだけど...mysqlは....
row_countの結果で登録できたかどうかの判定できるのかな
下記のようなSQLで実験 判定できるみたい
DROP PROCEDURE IF EXISTS p003;
delimiter //
CREATE PROCEDURE p003()
BEGIN
    -- 取得件数格納用
    DECLARE c INT;
  
    -- 追加しないINSERT文
    INSERT INTO a(tday) SELECT  CURRENT_TIMESTAMP() FROM dual WHERE FALSE;
    -- 直前の更新件数を取得
    SELECT ROW_COUNT() INTO c;
    IF c = 0 THEN
        SELECT 'result:0';
    ELSE
        SELECT 'result:1';
    END IF;
  
END
//
CALL p003();-- ここで実行
DROP PROCEDURE IF EXISTS p003;

: