こんにちは、阿久梨絵です!
SQLのクエリを実行時に変更できる 「 動的SQL 」 は、柔軟なデータ取得に欠かせない技術です。
例えば
・異なるテーブルに対して同じクエリを適用(ログ解析・月別データ取得など)
・検索条件を動的に変更(ユーザーの入力値に応じてクエリを調整)
・大量データを扱う際の最適化(複数のデータセットを動的に処理)
動的SQLを活用すると、SQLの柔軟性が大幅に向上し、より効率的にデータを操作できます!
動的SQLの基本的な使い方
1. PREPARE を使った動的SQLの実行
動的にSQLを構築し、プレースホルダを使用して実行 できます。
SET @table_name = ‘customers’;
SET @sql = CONCAT(‘SELECT * FROM ‘, @table_name);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
ポイント
・SET @table_name → 実行時に対象のテーブルを指定
・CONCAT → SQLを文字列として結合
・PREPARE / EXECUTE → 実際に動的SQLを実行
これで、テーブル名を動的に変更してSQLを実行できます!
2. EXECUTE IMMEDIATE を使った動的SQL
PostgreSQLや一部のデータベースでは EXECUTE IMMEDIATE を活用できます。
DO $$
BEGIN
EXECUTE IMMEDIATE ‘SELECT * FROM ‘ || ‘products’;
END $$;
ポイント
・文字列を EXECUTE IMMEDIATE で実行
・SQLを柔軟に構築できる
動的にSQLを構築する場合、データベースごとに実装方法が異なるので注意!
動的SQLの注意点
SQLインジェクションに注意!
プレースホルダを使わずにユーザー入力を直接SQLに組み込むと 不正なクエリが実行される危険性 があります。
SET @user_input = ‘products; DROP TABLE users;’;
SET @sql = CONCAT(‘SELECT * FROM ‘, @user_input);
PREPARE stmt FROM @sql;
EXECUTE stmt;
これは非常に危険!適切な入力チェックを行うべき!
対策として、プレースホルダを利用するか、入力値のバリデーションを徹底することが重要!
まとめ
動的SQL を活用すると、実行時にSQLクエリを変更でき、柔軟なデータ操作が可能になります!
・PREPARE を活用し、変数を用いたクエリの動的実行
・EXECUTE IMMEDIATE で直接SQLを構築(PostgreSQLなど)
・インジェクション対策を徹底し、安全な実装を心がける
実践的な動的SQLテクニックをマスターし、より効率的なデータ操作を実現しましょう!
阿久梨絵でした!