TECHNOLOGY

FAQ (よくある質問)

対象OS : 全て

QUESTION ( SQ1010101 )

DECLARE 文と CREATE VARIABLE 文の違いは何でしょうか。
また、これらの文を使用する場合、スクリプトの最後で DROP VARIABLE を実行するのが一般的な手順でしょうか。

ANSWER

CREATE VARIABLE 文で作成した変数は、接続固有のグローバル変数であると言えます。
この変数は、現在の接続で使用されるすべての SQL 文からアクセス可能であると同時に、変更も可能です。
1 回の接続では常に、特定の名前の変数は 1 つしか存在できません。
以後、使用する必要がなくなった時点で、通常はその変数を削除します。また、接続が終了した時点で、変数は自動的に削除されます。

これに対して、DECLARE 文では、ブロック・スコープを持つローカル変数が作成されます。
この変数は、ブロック内でのみアクセス可能です。

一般的には可能な限り、ローカル変数の使用をおすすめします。

CREATE VARIABLE 文は通常、高度な対応が求められる状況で、「グローバル・スコープ」の動作に変更を加える必要がある場合に有用です(事例によっては、最適なアプローチになります)。多くの場合、選択肢として検討する価値はあります。具体例を次に示します。

・該当する変数を使用して、トリガ (一部/全部) の動作を変更できます。
・フィルタ値を含む変数を関連クエリすべての WHERE 句で使用することで、接続固有の値に基づいて結果をフィルタできます(たとえば、特定の販売担当者の顧客のみをリスト表示する場合など)。

※SQL でグローバル変数を使用する場合、他のプログラミング言語の場合と同様に問題の原因になる可能性があるので、その取り扱いには十分な注意が必要です。