バインド変数 【bind variables】 ユーザー定義変数 / user-defined variable / バインド機構
概要
バインド変数(bind variables)とは、プログラミング言語の実行環境からデータベース管理システム(DBMS)へSQL文を発行する際、一部を動的に変更できる変数にする機能のこと。その部分に後から代入や変更を行ってもSQL文の再生成や解釈をし直す必要がなく、高速に実行することができる。データベースを参照・操作するプログラムでは、実行時にSQL文を生成してDMBSへ渡すことでデータベースへの問い合わせや内容の操作を依頼することができる。
このとき、SQL文の一部にプログラム中で扱う変数や入出力値などの内容を埋め込んで渡すことが頻繁に起きるが、文自体はほとんど同じなのにパラメータの一部が異なるだけで毎回異なるSQL文を生成してDBMSに解釈・実行させるのは効率が悪い。
そのような場合に、DBMSがバインド変数に対応していれば、プログラム側からDBMS側に「このSQL文のこの部分の値は可変である」とあらかじめ伝えることで、その部分のみを後から内部的に変更できる状態にした実行可能コードを生成させることができる。
プログラム側からはそのSQL文の実行を依頼する際にバインド変数に代入する値を任意に指定することができ、SQL文自体の再発行や再解釈を行うことなく、値が変更された文の再実行を高速に行うことができる。
この仕組みはOracle DatabaseやMicrosoft SQL Serverなど有力なDBMSのいくつかが「バインド変数」という名称で提供しており、一般的な呼称として定着しているが、例えばMySQLではほぼ同じ概念を「ユーザー定義変数」と呼んでおり、処理系によって名称や機能が異なる場合がある。
(2018.10.25更新)