動的なSQL文の構築
日付 | 2008/04/23 |
---|---|
ID | 08-012 |
バージョン | 11 |
プラットフォーム | Mac & Windows |
4DからデータソースにSQLクエリを送信する際、SQL文を動的に生成したい場合があります。
例1:データの挿入
INSERT INTO table VALUES (動的な値);
例2:検索
SELECT * FROM table WHERE field = (動的な値) ...;
上記SQL文で動的な値は、ユーザ入力あるいは他のデータソースから取得した値などが使用されます。
どのような場合でも、動的なSQL文を生成する場合には、4D式の参照を使用しなければなりません。なぜならその動的な値には、元のSQL文を不正なものにする要素が含まれる可能性があるからです。
例えばテキスト変数myDataに値"ABC'DEF"が格納されているとします。ここでSQL文を以下の式で生成すると、不正なSQL文が作成されます。
statement:="INSERT INTO table VALUES ('"+myData+"');"
この結果statementの中身は以下のようになります。
INSERT INTO table VALUES ('ABC'DEF');
このSQL文は、文字列を示すシングルクォートが余計に挿入されるため、エラーとなります。
これを回避するためには4D式の参照を使用して、SQL文を構築します。例えば以下のようにします。
Begin SQL
INSERT INTO table VALUES (:myData);
End SQL
4D式の参照については「4D SQL リファレンス」の「4DでSQLを使用する」-「4D SQLエンジンにアクセスする」の節を参照してください。
なお、何らかの理由で4D式の参照を使用できない場合、動的な値に対するエスケープ処理が必要になります。