2020-10-02 (金)
[MySQL] 文字列変数でSQL文を作成して実行する
ユーザー定義変数(set @var_name)を定義してSQL文を作り、prepare と execute を使用してSQL文を実行します。
環境
- Windows 10 Pro 64bit 1909
- MySQL 8.0.19
結果
例として、information_schema の中で最も TABLE_NAME が長いテーブルを取得します。
set @table_schema = 'information_schema';
select TABLE_NAME
into @table_name
from information_schema.TABLES
where TABLE_SCHEMA = @table_schema
order by length(TABLE_NAME) desc
limit 1;
set @sql = concat('select * from information_schema.', @table_name, ' limit 10');
prepare stmt from @sql;
execute stmt;
説明
# ユーザー定義変数に格納
set @table_schema = 'information_schema';
# information_schema の中で最も TABLE_NAME が長いテーブルを取得
select TABLE_NAME into @table_name # @table_name 変数にselectした結果を格納
from information_schema.TABLES
where TABLE_SCHEMA = @table_schema # @table_schema 変数をwhere句に使用
order by length(TABLE_NAME) desc
limit 1;
# 文字列でSQL文を作成
set @sql = concat('select * from information_schema.', @table_name, ' limit 10');
# 作成したSQL文を確認したければ、selectを実行する
select @sql;
# select * from information_schema.COLLATION_CHARACTER_SET_APPLICABILITY limit 10
# 作成したSQL文を実行する
prepare stmt from @sql;
execute stmt;