動的SQLとは?どうてきえすきゅーえる
動的SQLとは、SQL文の形そのものを実行時に決める方式。文字列として組み立ててDBMSへ渡すため、解析(PREPARE)と実行(EXECUTE)が別々に走る。PostgreSQLは同じ準備済み文を6回目から汎用計画に切り替えるので、選択率が値によって桁違いになる列では計画が固定されて急に遅くなることがある。
最終更新:2026-10-06
データベースSPを最短で暗記・合格する →背景
埋込みSQLは、書いた文をコンパイル時に解析して実行計画まで作っておく前提で設計された。だが検索画面のように任意の項目を組み合わせる要件では、条件が10個あれば文の形は1,024通りになり、静的SQLでは書き切れない。そこで解析と実行を分け、文の形を実行時に決められる口が用意された。試験では、その代償である解析コストの増加と、文字列連結による命令の注入が問われる。
具体例
PostgreSQLで受注検索画面を作り、未入力の項目をWHERE句から外して文を組み立てる。同じ形の文を使い回すならPREPAREした結果を保持し、値だけを $1 で差し替える。こうすると解析が接続あたり1回で済み、pg_stat_statements 上も1行にまとまるので遅い文を特定しやすい。
試験での引っ掛け
文字列連結で値を埋め込むと注入を許すため、値は必ずバインド変数で渡す。ただし列名や並び順はバインドできず、そこはアプリ側の許可リストで絞る必要がある点を落としやすい。Oracleではリテラルを埋め込むたびにハードパースが起き、共有プールのラッチ競合になる。
関連用語
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。