INSERTを複数回行いたくて調べていたらストアドルーチンという単語にたどり着いた。
開発環境
# ホスト > docker --version Docker version 20.10.8, build 3967b7d > docker-compose --version docker-compose version 1.29.2, build 5becea4c # コンテナ root@{CONTAINER_ID}:/# mysql --version mysql Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)
ストアドルーチンとは
データベースに対する一連の命令を1つにまとめたもの。 ストアドルーチンには2つの種類があり、戻り値が無いものをストアドプロシージャ、戻り値が有るものをストアドファンクションと言う。
前準備
# テーブル作成 CREATE TABLE t0( age INT NOT NULL, height INT NOT NULL ) ;
ストアドプロシージャ
コード
DELIMITER // CREATE PROCEDURE iota_insert(IN i INT) BEGIN DECLARE count INT DEFAULT 0; WHILE count < i DO SET count = count + 1; INSERT INTO t0 VALUES(count, count); END WHILE; END // DELIMITER ;
呼び出し
mysql> call iota_insert(10000); Query OK, 1 row affected (19.33 sec)
中身確認
mysql> SELECT * FROM t0 LIMIT 5; +-----+--------+ | age | height | +-----+--------+ | 1 | 1 | | 2 | 2 | | 3 | 3 | | 4 | 4 | | 5 | 5 | +-----+--------+ mysql> SELECT COUNT(age), COUNT(height) FROM t0; +------------+---------------+ | COUNT(age) | COUNT(height) | +------------+---------------+ | 10000 | 10000 | +------------+---------------+
ストアドファンクション
コード
DELIMITER // CREATE FUNCTION hello(s CHAR(10)) RETURNS CHAR(100) DETERMINISTIC BEGIN RETURN CONCAT('Hello', s, '.'); END // DELIMITER ;
呼び出し
mysql> SELECT hello('TOM'); +--------------+ | hello('TOM') | +--------------+ | HelloTOM. | +--------------+ mysql> SELECT hello(name) FROM idol LIMIT 3; +------------------------+ | hello(name) | +------------------------+ | Hello櫻木 真乃. | | Hello八宮 めぐる. | | Hello風野 灯織. | +------------------------+