Webサイト制作コースのお申し込みはこちら

Oracle databaseでは、SQLの中で変数が使用可能で、これをバインド変数と呼びます。また、他にも同様の機能を持つデータベース管理ソフトがあります。

今回は、ここではOracle databaseを例に、バインド変数の基本について解説します。

Oracle dataseのバインド変数の基本

データベース管理ソフトでは、SQLの中で変数を宣言することで、まるでプログラム言語のように、その変数に値を代入し、SQLを実行する際にそのデータを適用される機能が使えます。

そして、Oralce dataseではその変数をバインド変数と呼び、Javaなどのプログラムなどからよく使われる機能です。次から、このバインド変数の基本について解説します。

バインド変数の宣言

バインド変数を利用するためには、VARIABLEコマンドを使い、変数を宣言しなければなりません。

ただし、VARIABLEコマンドで宣言できる変数は、数値型か文字列型のいずれかです。間違えると、SQLの実行中にエラーが発生するので注意してください。

VARIABLEコマンドの構文は次のとおりで。

VARIABLE 変数名 変数の型

(VARIABLEコマンドで宣言できる変数の型は、SQLで使える数値型、または、文字列型に限られる)

バインド変数の宣言例

variable val NUMBER;
variable str VARCHAR2(20);

バインド変数に値を格納する

先ほど宣言したバインド変数は、SQLの中でコロン「:」を付けて参照します。また、バインド変数に数値または文字列を格納する場合は、EXECUTEコマンドを使用し、値の代入に「:=」演算子を使用します。EXECUTEコマンドの使い方を次に紹介します。

EXECUTE :変数名 := 数値または文字列

バインド変数への値を代入する例

execute :val := 16384;
execute :str := 'potepan style';

短期集中でWebエンジニアになれるスクールはこちら

バインド変数への代入にはSQL関数も使える

バインド変数に値を入力する際、SQLで使える関数の結果を代入させることも可能です。例えば、今日の日付を文字列で格納する場合、次のようなSQLを記述します。

なお、この例では、日付を文字列に変換して格納するため、to_date関数を使用します。

バインド変数に今日の日付を格納する例

variable today VARCHAR2(20);
execute :today := to_date(SYSDATE, 'YYYY-MM-DD');

また、値が1つだけ出力される場合に限られますが、SELECT文の結果をバインド変数への代入に使うことも可能です。次のSQLは、MAX関数を使い、ある列の最大値をバインド変数に代入する例です。

variable today VARCHAR2(20);
execute :today := SELECT MAX(price) FROM price_table;

バインド変数をSQLで使う

SQLのSELECT句などでバインド変数を利用する場合、バインド変数に値を格納するのと同じく、コロン「:」を付けた変数を使います。

例えば、SELECT句で検索条件としてバインド変数を使う場合、次のように使います。

バインド変数を使ったSQLの例

variable val NUMBER;
variable str VARCHAR2(20);

execute :val := 16384;
execute :str := 'potepan style';

SELECT * FROM table_one
WHERE
price = :val AND
name  = :str AND
date = :today;

バインド変数が使えるのはOracle databaseだけではない

Oracle databaseのバインド変数の使い方を解説しましたが、変数が使えるデータベース管理ソフトは、Oracle databseだけではありません。

IBM DB2など、昔から使われているエンタープライズ用途のデータベース管理ソフトでもバインド変数が使えます。

そして、このようなのデータベース管理ソフトでは、Oracle databaseと同じく、変数名にコロン「:」を付けて、変数を参照するもの同じです。

なお、OracleやDB2等ではバインド変数と呼ばれていますが、他のデータベース管理ソフトでは別の名称で呼ばれています。次から、それらも合わせて解説します。

SQL Serevrの変数ではアットマークを使う

マイクロソフト製のSQL Serverは、SQLが使えるデータベース管理ソフトの中でも特殊な仕様が多いアプリケーションですが、これもSQLの中で変数が使えます。ただし、SQL Serverでは、変数にアットマーク「@」を付けます。

バインド変数の宣言

SQL Serverで変数を利用する場合、プログラミング言語のように変数を宣言しなければなりません。そして、変数の宣言に使われるコマンドがDECLAREです。DECLAREの基本的な構文は次のとおりです。

DECLARE @変数名 データタイプ;

なお、このDECLARコマンドは、Oracle databaseのvariableコマンドと違い、機能がたくさんあります。そして、下記の例のように、変数の初期値を入れることも可能です。

DECLAREコマンドの例

DECLARE @keyword varchar(30);
DECLARE @findstr varchar(30) = 'Mc%';

バインド変数の使い方

SQL Serverでは、変数に値を代入する場合、SETコマンドを使います。また、代入した値は、アットマーク「@」付きの変数名を使い、SELECT句などのSQLで利用できます。

変数に値を代入し、SQLで使う例

DECLARE @keyword varchar(30);
SET @keyword = 'Mc%';
SELECT p.LastName, p.FirstName From PersonTbl as p
WHERE LastName LIKE @keyword;

バインド変数をSELECT句の中で代入

SQL Serverでは、SELECT句の中でバインド変数に数字や文字列などを代入できます。例えば、次のように、DECLARE文で変数を宣言し、代入のためのSELECT文を記述できます。

バインド変数をSELECT句の中で代入する例

DECLARE @ThisDate  DATE;
DECLARE @NextDate  DATE;

SELECT 
  @ThisDate = GETDATE(),
  @NextDate = DATEADD(DAY,1,@ThisDate)
;

上記の例は、下記のSET文を使った例と同じです。

DECLARE @ThisDate  DATE;
DECLARE @NextDate  DATE;

SET @ThisDate = GETDATE();
SET @NextDate = DATEADD(DAY,1,@ThisDate);

MySQLでも変数が使える

オープンソースのデータベース管理ソフトとして多くのシステムで利用されている、MySQLおよび互換性のあるmariadbでは、「ユーザー定義変数」がバインド変数と同じように使えます。

なお、MySQLでは変数名の前にアットマーク「@」を付けて利用し、使い方はSQL Serverの変数と同じです。
短期集中でWebエンジニアになれるスクールはこちら

変数の宣言なしでも使える

MySQLのバインド変数は、特に宣言しなくても、SQLの中で使えます。例えば、SETコマンドは変数に値を代入するコマンドですが、変数を宣言せずに、SETコマンドで利用できます。

なお、SETでは、=演算子と:=演算子のどちらでも使えますが、=演算子は比較演算子として使われることが多いので、:=演算子を使う方が良いでしょう。

MySQLの変数を使ったSQLの例

SET @keyword ;= 'Mc%';
SELECT LastName, FirstName From PersonTbl
WHERE LastNmae LIKE @keyword;

なお、MySQLのバインド変数は、SQL Serverと同じように変数名に「@」を付けて参照しますが、SQL Serverと同じSQLが動作する訳ではありません。使えない機能もあります。もし、移植する機会があれば、バインド変数の扱いに注意してください。

まとめ

Oracle databaseのバインド変数を中心に、SQLでの変数の使い方を簡単に解説しました。

なお、SQLで使える変数には、コロン「:」を付ける方法と、アットマーク「@」を付ける方法があり、データベース管理ソフトによっても使い方が違います。

SQLの中で変数を利用する場合は、移植が面倒になるケースもあるので、そのことを理解したうえで利用してください。

SQLを学んでWebエンジニアを目指そう

Webエンジニアは、Webサービスを作るエンジニアで非常に人気の高い職種です。
スタートアップやベンチャー企業が中心なので柔軟性のある雇用形態、魅力的な作業環境、面白いプロジェクト、高い報酬など非常に魅力的な求人が多いです。
Ruby on RailsやGo言語を用いたプロジェクトが多く、SQLも重要なスキルとなります。

このブログを運営するプログラミングスクールのポテパンキャンプでは、実践的なカリキュラムと現役エンジニアからのレビュー、そしてポートフォリオ添削や模擬面談などの面談転職サポートにより、最短距離でWebエンジニアを目指すことができます。

Webエンジニアへの転職を考えている方は、是非一度無料カウンセリングへお申込みください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。