mysqlでストアドプロシージャ その3 - ROW_COUNT()
2012/09/22
mysql
sql
ストアド
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;
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;
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;
: