続いてもう少し高度なIF文の利用を取り上げます。先ほどのサンプルでは、条件式に基づいて実行する命令文が1つだけでしたが、複数の命令を実行することも可能です。しかし、IF文では、単純に命令文を記述した場合は1つの命令文しか実行しません。次の例を見てみましょう。
CREATE PROCEDURE uspSamle3 |
一見すると、それぞれの条件式に従ってメッセージを返しているように見えます。しかし、実際にストアドプロシージャを実行してみると次のような結果となります。
EXEC uspSamle3 NULL |
このように、条件式で分かれているはずの命令文が実行されてしまいます。これはIF文が命令文を1つしか条件式として取り扱っていないことに起因します。このような問題を解決するために、「BEGIN…END」構文を利用します。BEGIN…END構文は、命令文をブロック化しひとまとめにできます。IF文で利用する場合、次のような構文となります。
IF 条件式
BEGIN
条件式がTRUEの場合に実行する命令文
END
ELSE
BEGIN
条件式がFALSEの場合に実行する命令文
END
それでは、uspSamle3をBEGIN…END構文を利用して想定したとおりに動くように直しましょう。
ALTER PROCEDURE uspSamle3 |
ストアドプロシージャ全体をBEGIN…ENDでブロック化するとともに、IF文の中に埋め込んだ条件式に対してもBEGIN…ENDを指定しています。実行結果は次のようになります。
EXEC uspSamle3 NULL |
BEGIN…END構文の利用によって、意図したとおりの動きになっていることが分かります。このようにIF文で複数の命令文を記述する場合、例のようにBEGIN…ENDを正しく利用する必要があります。
Copyright © ITmedia, Inc. All Rights Reserved.