ダイナミック SQL とは、SQL が実行される前にプログラムが変数を利用して生成する SQL コードのことです。ダイナミック SQL を利用すると、検索基準ページで入力されたフィールドに基づいて、検索に WHERE 節を追加するといったタスクを実行できます。
このチュートリアルのクエリー対象列に基づいて、検索結果を表示する SQL クエリーは次のようになります。
SELECT tripName, tripLocation, departureDate, returnDate, price, tripID FROM trips
「Trip Search」フォームの目的は、ユーザーの入力に従って、SQL SELECT ステートメントを完成させる WHERE 節を作成するのに必要なデータを提供し、クエリーを制限することです。
ユーザーが検索基準を旅行検索フォームに入力し、[Search] ボタンをクリックすると、フォームフィールドが「Trip Search Results」ページに転送されます。転送されたフィールドの値によって、SQL SELECT ステートメントの WHERE 節が構成されます。次の例は、検索ページで設定された検索基準に従って生成される WHERE 節の例です。
WHERE tripLocation = 'Aruba' WHERE tripLocation Like 'C%' WHERE tripLocation = 'China' AND departureDate > 2001/1/1 AND price < 1500
上の例では、SQL の AND 演算子によって検索条件節が結合されます。旅行検索の例を簡単にするために、SQL の AND 演算子を使用してすべての検索条件節を結合します。検索基準を他の基準と結合するときに AND と OR を選択できれば、より高機能な検索基準ページとなります。
アクションページは、ユーザーが要求した情報を SQL SELECT ステートメントを使って取り出せるよう、WHERE 節が設定されたメソッドを呼び出します。すると、ユーザークエリーの結果を含む HTML テーブルが、cfoutput ブロックを使ってアクションページに表示されます。
SQL SELECT ステートメントの中の WHERE 節は文字列です。CFML の cfset タグと cfif タグを使用して、検索アクションページに渡される値に従って条件付きで WHERE 節を作成します。cfset ステートメントでは、変数が作成されたり、既存の変数の値が変更されます。たとえば、color という名前の変数を作成し、その値を red に初期化するには、次のステートメントを使用します。
<cfset color = "red">
cfif タグは、テストで true になるか false になるかによって、コードの異なる部分にブランチするようにプログラムに指示します。たとえば、color 変数が red に等しいときにあるコードを実行し、それ以外の場合は別のコードを実行するように設定するには、次の擬似コードを使用します。
<cfif color EQ "red"> ... color が red のときのステートメント <cfelse> ... color が red 以外のときのステートメント </cfif>
SQL WHERE 節を作成することは、主に文字列連結の作業です。ColdFusion では & 演算子で 2 つの文字列を連結できます。たとえば、次のコードを見てください。
<cfset FirstName = "Wilson"> <cfset LastName = "Gato"> <cfset FullName = FirstName & " " & LastName> <cfoutput>私の名前は、#FullName# です。</cfoutput>
結果は次のテキストになります。
私の名前は、Wilson Gato です。
旅行検索フォームの個々の検索基準について、「Trip Search Results」ページ内のコードで次の作業を実行する必要があります。
cfif タグを使用します。たとえば、<cfif Form.tripLocationValue GT ""> のように使用します。
WHERE サブ節のコードは、次のようになります。
<cfif Form.tripLocationOperator EQ "EQUALS">
<cfset WhereClause = WhereClause & " AND tripLocation = '" &
form.tripLocationValue & "'" >
<cfelse>
<cfset WhereClause = WhereClause & " AND tripLocation like '" &
form.tripLocationValue & "%'" >
</cfif>
SQL SELECT ステートメントの WHERE 節内にある文字列の列をテストするときは、引用符でテスト値を囲む必要があります。
変数を使用して WHERE 節を構成するときは、データベースサーバーがエラーを返さないように、引用符を保護する必要があります。引用符を保護するには、ColdFusion の PreserveSingleQuotes 関数を使用する必要があります。PreserveSingleQuotes 関数を使用すると、ColdFusion は、その関数に渡された変数文字列に含まれている引用符にエスケープ文字を自動的に追加できなくなります。
メモ: cfqueryparam タグも、引用符をエスケープします。詳細については、『CFML リファレンス』を参照してください。
ColdFusion MX 7 | ColdFusion MX 6.1 | ColdFusion MX* | ColdFusion 5* | フォーラム* | デベロッパーセンター | サポート情報 | バグ報告
バージョン7
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/coldfusion/7_jp/htmldocs/dynamic6.htm