SQLコマンドのキーワード"INFILE"
日付 | 2009/01/01 |
---|---|
ID | 09-009 |
バージョン | 11 |
プラットフォーム | Win & Mac |
4D v11 SQL Release 3 (11.3)では、利用できるSQLコマンドのキーワードに"INFILE"が追加されました。INFILEキーワードは、外部ファイルの内容を使用して新しいレコードの値を定義するために使用されるものです。大事なのは、作られるレコードの数、つまりそれがひとつのレコードであるということです。INFILEは、外部ドキュメントを元に複数のレコードを作成する場合は想定しておらず、実際そのような操作をサポートしていません。主な用途は、テキストまたはBLOBフィールドの新規レコードデータを外部ファイルから取り込むためです。画像ファイルであれば、いったん、BLOBとして保存しなければなりません。VALUES句に複数のINFILEキーワードを使用することはできますが、フィールド毎にそのようにする必要があります。たとえば下記のような構文を記述します。
INSERT INTO {sql_name | sql_string} [(column_reference, ..., column_reference)] [VALUES({[INFILE]arithmetic_expression |NULL}, ..., {[INFILE]arithmetic_expression |NULL};) |subquery]
INFILEと併用できるのは、VARCHARタイプの式に限られます。INFILEキーワードに続くarithmetic_expressionは、ファイルパス名として評価され、ファイルが存在する場合、その内容が対応する列にINSERTされます。INFILEから値を受け取ることができるのは、テキストあるいはBLOBタイプのフィールドだけです。ファイルの内容は直接伝送され、変換は行なわれません。
クエリがリモートクライアントで発行される場合であっても、INFILEで参照するファイルは、SQLエンジンが動作しているマシン上に存在しなければなりません。したがって渡されるパス名は、そのマシンのオペレーションシステムのシンタックスで表記されている必要があります。相対あるいは絶対パスが使用できます。下記の例題の場合、上はMac OS Xの絶対パス、下はWindowsの絶対パスを使用しています。コードの内容は、ファイル"myfile"の中身全体をテキストまたはBLOBの"theColumn"に取り込むというものです。
Begin SQL INSERT INTO theTable ( ID, theColumn ) VALUES (1, INFILE "myHD:myFolder:myFolder2:myFile"); End SQL Begin SQL INSERT INTO theTable ( ID, theColumn ) VALUES (1, INFILE "C:\\myFolder\myFolder2\myFile"); End SQL