[MySQL] 文字列変数でSQL文を作成して実行する

2020-10-02 (金)

ユーザー定義変数(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;

感謝

2020-10-02 (金)