Subscribe:

2011/04/04

「IF NOT EXIST INSERT」を実現(ストアド)

mysqlにINSERT INTOする時に重複キーレコードがなければ追加してあれば追加しないってのをストアドで実現した時のメモ
DROP PROCEDURE test_procedure; -- 新規登録時には必要なし
delimiter // -- デミリタを変更
CREATE PROCEDURE test_procedure( in p1 int,in p2 varchar(8) ) -- 入力パラメータ設定
BEGIN -- プロシージャー開始
DECLARE done INT DEFAULT 0; -- 変数を設定
DECLARE cnt INT DEFAULT 0;  -- 変数を設定
DECLARE cur CURSOR FOR SELECT count(*) as cnt FROM test_table WHERE id=p1;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; 

OPEN cur;
REPEAT
FETCH cur INTO cnt;
IF NOT done THEN
IF cnt = 0 THEN -- 重複データがなければ追加
INSERT INTO test_table(id,val) VALUES (p1,p2);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END//
delimiter ;

test_tableの内容
idval
1apple
2orange
-- ストアドプロシージャーを実行
call test_procedure( 2,'melon' );
call test_procedure( 3,'peach' );
idval
1apple
2orange
3peach
'peach'のみが追加された。

0 件のコメント: